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

7.查询性能优化

程序员文章站 2024-03-20 13:03:46
...
1.优化数据访问,减少不必要的列(有时为了代码服用可以考虑select *)
2.扫描的行数和访问类型(全表扫描,索引扫描,范围扫描,唯一索引扫描,常数引用)
3.重构查询方式
    切分查询(一次1w最佳)
    分解关联查询然后在应用中组合(让缓存更高效,减少锁竞争,在应用层做关联可扩展性好,查询效率提升,减少冗余记录查询,相当于在应用层做哈希关联而不是mysql本身的嵌套循环关联)
三种方式应用 where 条件,从好到坏:
1.在索引中使用 where ,这是在存储引擎层实现
2.使用覆盖索引(Using index),直接从索引中过滤不需要的记录,在MySQL服务器层实现,无需回表
3.从数据表返回数据再过滤(Using where),在服务器层实现。
MySQL 查询过程:
客户端=>查询缓存=>解析器=>解析树=>预处理=>解析树=>查询优化器=>执行计划=>执行计划引擎=>api 存储引擎=>数据


mysql 半双工通信
查询状态(每个连接都有一个状态,show full processlist):
1.sleep : 线程正在等待客户端发送新的请求
2.query : 线程正在查询或者返回数据给客户端
3.locked : 在服务器层,等待表锁。在存储引擎实现的锁(行锁)并不会体现
4.analyzing and statistics : 线程正在收集存储引擎统计信息,并生成执行计划
5.copying to tmp table [on disk] : 线程正在查询,并将其结果复制到一个临时表中。这种状态要么在做 group by 操作,要么是文件排序操作,要么是 union 操作。on disk,将一个内存临时表存放到磁盘上。
6.sorting result : 对结果集进行排序
7.sending data :  线程可能在多个状态之间传送数据,或者在生成结果集,或者向客户端发送数据。
优化器:
    1.静态优化(编译时优化,只做一次)
    2.动态优化(运行时优化,每次执行时需要重新评估)
MySQL 两种排序算法:
    1.两次传输排序(旧版本)
    2.单次传输排序

关联查询如果需要排序,如果 order by 中的列全部来自第一张表,extra 为 using filesort.
除此之外的所有情况,MySQL会将关联的结果放到临时表中,再进行文件排序。extra 为 using temporary;using filesort

1.查询为什么慢
7.查询性能优化
7.查询性能优化
7.查询性能优化

2.慢查询基础:优化数据访问
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化

3.重构查询方式
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化

4.查询执行的基础
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化

7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化

执行计划:
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化

排序优化:
7.查询性能优化
7.查询性能优化
7.查询性能优化
7.查询性能优化

查询执行引擎:
7.查询性能优化
7.查询性能优化

返回结果给客户端:
7.查询性能优化
7.查询性能优化


http://www.cnblogs.com/heat-man/p/4945708.html