欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL索引优化(为排序)

程序员文章站 2022-03-04 19:14:16
...

MySQL优化

一般面试MySQL怎么做优化的答题思路:
1.先至少让系统跑一天,看看系统的慢SQL情况
2.开启慢查询日志,设置阙值,比如超过5秒的就是慢SQL,并将它抓取出来
3.explain+慢SQL 进行分析
4.show profile查询SQL在MySQL服务器里面的执行细节和生命周期情况
5.SQL数据库服务器的参数调优

一、优化原则:小表驱动大表,即小的数据集驱动大的数据集。

当B表的数据集必须小于A表的数据集时,用in优于exists

SELECT * FROM A WHERE id IN (SELECT id FROM B);
等价于
SELECT * FROM A WHERE EXISTS (SELECT  1 FROM B WHERE B.id=A.id)

当A表的数据集必须小于B表的数据集时,用exists优于in

EXISTS
SELECT ... FROM table WHERE EXISTS(subquery)

该语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果(true/false)来决定主查询的数据结果是否得以保留。
MySQL索引优化(为排序)

二、Order By优化

1.ORDER BY子句,尽量使用index方式排序,避免使用FileSort方式排序
(1)建立一个表tblA,并在age和birth字段上建立复合索引
MySQL索引优化(为排序)
(2)分析Order By后的索引使用情况

EXPLAIN SELECT * FROM tblA WHERE age>20 ORDER BY age;

MySQL索引优化(为排序)

EXPLAIN SELECT * FROM tblA WHERE age>20 ORDER BY age,birth;

MySQL索引优化(为排序)

EXPLAIN SELECT * FROM tblA WHERE age>20 ORDER BY birth;

MySQL索引优化(为排序)
产生了filesort

EXPLAIN SELECT * FROM tblA WHERE age>20 ORDER BY birth,age;

MySQL索引优化(为排序)
产生了filesort
MySQL索引优化(为排序)
MySQL支持两种方式的排序,FileSort和Index,index效率高,它指MySQL扫描索引本身完成排序,FileSort方式效率较低。

order by满足两情况时,会使用index方式排序:1.order by语句使用索引最左前列 2.使用where子句与order by子句条件组合满足索引最左前列。
尽可能在索引列上完成排序操作,遵照索引建立的最佳左前缀原则。
如果不在索引列上,filesort有两种算法,双路排序和单路排序:
MySQL索引优化(为排序)
单路排序会有些问题,例如:
MySQL索引优化(为排序)
优化策略:
MySQL索引优化(为排序)
为什么呢?
MySQL索引优化(为排序)
最后来一个总结:
MySQL索引优化(为排序)

三、Group By优化

MySQL索引优化(为排序)

相关标签: MySQL 笔记