MySQL笔记(查询优化续1)
来源:互联网 发布:时间管理数据化 编辑:程序博客网 时间:2024/06/17 00:01
在MYSQL中,提供给优化器使用的统计数据是由存储引擎提供,例如表或索引的页面数量、键和行的长度等信息。
由优化器产生的执行计划是一个树形结构,用于指导执行引擎产生结果,其结构为一个左深度树.
如:
join
join tbl4
join tbl3
tbl1 tbl2
MYSQL联接优化器是优化器中最重要的部分,决定了多表查询的最佳执行顺序。MYSQL使用循环嵌套的方式来进行联接操作,具体来说,就是总是尝试对当前表的一行,去找到联接表的匹配行,回溯,然后继续下一行匹配。这样,不同的联接顺序将产生不同的开销。
当然,优化器有时不一定会得到更优的方案,可以使用STRAIGHT_JOIN参数强制按照查询中表的联接顺序来执行查询。
当有很多表进行联接的时,组合方案将急速上升,当表的数量超过optimizer_search_dpth时,MySQL会采用一些快速的搜索策略(具体需要分析源代码),有的查询不能被重新排序(如 LEFT JOIN),联接优化器也会利用这些客观情况,减小搜索空间。
排序优化
MySQL可以利用索引来加快排序,但当没有索引时,则需要自己对结果进行排序
当待排序数据数量和排序缓存大小相当,则在内存内利用快速排序进行排序;
否则,就在磁盘上对数据进行分块,对每块数据进行快速排序,然后进行合并
两种文件排序方法:
双路排序——先读取行和执行order by的列,进行排序后,再次扫描表,读取对应行。
单路排序——直接读取查询需要的所有列,进行排序后输出特定列。
在排序联接的时候。若orderby的第一个表,则先对该表进行排序。然后处理联接,否则,先将联接结果保存到临时表中,然后对临时表进行排序。
执行结果发送
服务器增量的产生和发送结果,当处理完所有表,并产生一行输出开始,就会把结果发送到客户端。如果查询是可缓存的,还会在服务器端进行缓存
- MySQL笔记(查询优化续1)
- MySQL笔记(查询优化)
- mysql 查询优化笔记
- MYSQL笔记(查询优化续2--查询优化限制5.1版本)
- mysql查询优化(1)
- mysql查询优化学习笔记
- MYSQL笔记(查询优化续3,特定类型的优化建议)
- Mysql Query optimizer mysql查询优化笔记
- MySQL:优化笔记(1)
- mysql 优化笔记一(定位慢查询)
- MySQL查询优化9种方法笔记
- 高性能Mysql笔记 (6)---查询优化
- MYSQL查询优化(一)
- MYSQL查询优化(二)
- MYSQL查询优化(一)
- MYSQL查询优化(二)
- mysql查询优化(一)
- MYSQL查询优化(一)
- jquery-ui显示不正常解决办法
- 关于 MFC 中的 DestroyWindow
- MTK平台获取本机的SIM卡中IMSI号
- 一个优秀的研发团队应该具备什么特征
- cegui_wow like(1)
- MySQL笔记(查询优化续1)
- socket TCP
- 收集一些中国象棋程序
- MTK SIM1和SIM2互换
- MTK短消息编程
- 编程修改BIN等二进制文件
- 谁有天眼2代的视频驱动啊
- socket UDP
- Ubuntu 最新版 10.04 下安装中文智能输入法