6. 查询性能优化

6.1 为什么查询速度会慢(这个标题有毛病?查询要是快我还学你干嘛?)
6.2 慢查询基础:优化数据访问

6.2.1 是否向数据库请求了不需要的数据

6.2.2 MySQL是否在扫描额外的记录

响应时间   扫描的行数  返回的行数

6.3 重构查询的方式

6.3.1 一个复杂的查询还是多个简单查询

6.3.2 切分查询

6.3.3 分解关联查询

6.4 查询执行的基础

客户端--> 查询缓存-->解析器-->预处理器-->查询优化器-->查询执行引擎-->存储引擎-->数据

6.4.1 MySQL客户端/服务端通信协议

查询状态:

Sleep 线程正在等待客户端发送新请求

Query 线程正在执行查询或者发送结果给客户端

Locked 在MySQL服务器层,线程等待表锁。 InnoDB行锁,并不会体现在线程状态。

Analyzing and statistics 线程收集存储引擎统计信息,并生成查询的执行计划。

Copying to tmp table on disk 线程正在执行查询,将结果复制到临时表,要么在做Group BY ,要么是文件排序,或者UNION,后面的on disk 将内存临时表放磁盘上。

Sorting result 线程正常对结果集排序。

Sending data:线程可能在多个状态之间传递数据,或者生成结果,或者向客户端返回数据。

6.4.2 查询缓存

6.4.3 查询优化处理

解析SQL、预处理、优化SQL执行计划。

6.4.4 查询执行引擎

6.4.5 返回结果给客户端

6.5 MySQL查询优化器的局限性

6.5.1 关联子查询

6.5.2 UNION的限制

6.5.3 索引合并优化

6.5.4 等值传递

6.5.5 并行执行

MySQL无法利用多核特性来并行执行。

6.5.6  哈希并联

6.5.7 松散索引扫描

6.5.8 最大值和最小值优化

6.5.9 在同一个表上查询和更新

6.6 查询优化器的提示

InnoDB在不访问主键的情况下无法排他地锁定

6.7 优化特定类型的查询

6.7.1 优化 COUNT() 查询

MyISAM COUNT时候不带WHERE才能特别快,因为无须实际地计算表行数

6.7.2 优化关联查询

6.7.3 优化子查询。

6.7.4 优化 GROUP BY 和 DISTINCT

6.7.5 优化 LIMIT 分页

6.7.6 优化 SQL_CALC_FOUND_ROWS

6.7.7 优化 UNION 查询

6.7.8 静态查询分析

6.7.9 使用用户自定义变量

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值