如基于联合索引来优化:(name,age,position)
Limit查询优化:
1. 根据自增且连续的主键排序的分页查询
EXPLAIN SELECT * FROM employees where limit 9000 ,5 ; //执行效率慢
EXPLAIN SELECT * FROM employees where id >9000 limit 5 //相对执行快
2、根据非主键字段排序的分页查询
mysql>EXPLAIN select * from employees ORDER BY name limit 90000,5;
让排序时返回的字段尽可能少,所以可以让排序和分页操作先查出主键,然后根据主键查到对应的记录,如下优化:
mysql> select * from employees e inner join (select id from employees order by name limit 90000,5) ed on e.id = ed.id;
Inner join的优化:
Inner join:表关联原则:小表驱动大表,大表最好走索引
1. 嵌套循环连接Nested-Loop Join(NLJ)算法 (在t1和t2表中a都是设置为索引的,且t1表中数据非常多,t2表数据比较少)
mysql> EXPLAIN select * from t1 inner join t2 on t1.a= t2.a;
一次一行循环地从第一张表(称为驱动表)中读取行,在这行数据中取到关联字段,根据关联字段在另一张表(被驱动表)里取出满足条件的行,然后取出两张表的结果合集。
2. 基于块的嵌套循环连接Block Nested-Loop Join(BNJ)算法(在t1和t2表中b没有设置为索引的