失效链接处理 |
Mysql索引优化案例 PDF 下载
本站整理下载:
相关截图:
主要内容:
常见sql深入优化
分页查询优化
1 示例表:
2 CREATE TABLE `employees` (
3 `id` int(11) NOT NULL AUTO_INCREMENT,
4 `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名',
5 `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
6 `position` varchar(20) NOT NULL DEFAULT '' COMMENT '职位',
7 `hire_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入职时间',
8 PRIMARY KEY (`id`),
9 KEY `idx_name_age_position` (`name`,`age`,`position`) USING BTREE
10 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='员工记录表';
11
12 drop procedure if exists insert_emp;
13 delimiter ;;
14 create procedure insert_emp()
15 begin
16 declare i int;
17 set i=1;
18 while(i<=100000)do
19 insert into employees(name,age,position) values(CONCAT('zhuge',i),i,'dev');
20 set i=i+1;
21 end while;
22 end;;
23 delimiter ;
24 call insert_emp();
很多时候我们业务系统实现分页功能可能会用如下sql实现
1 mysql> select * from employees limit 10000,10;
表示从表 employees 中取出从 10001 行开始的 10 行记录。看似只查询了 10 条记录,实际这条 SQL 是先读取 10010
条记录,然后抛弃前 10000 条记录,然后读到后面 10 条想要的数据。因此要查询一张大表比较靠后的数据,执行效率
是非常低的。
>>常见的分页场景优化技巧:
1、根据自增且连续的主键排序的分页查询
首先来看一个根据自增且连续主键排序的分页查询的例子:
mysql> select * from employees limit 90000,5;
该 SQL 表示查询从第 90001开始的五行数据,没添加单独 order by,表示通过主键排序。我们再看表 employees ,因
为主键是自增并且连续的,所以可以改写成按照主键去查询从第 90001开始的五行数据,如下:
mysql> select * from employees where id > 90000 limit 5;
|