MySQL-其他的优化方法

1)exists和in的优化
2)order by优化

1)exists和in的优化

如果主查询的数据集大,则使用i关键字,效率高。

如果子查询的数据集大,则使用exist关键字,效率高。

select ..from table where exist (子查询) ;
select ..from table where 字段 in  (子查询) ;

2)order by优化

  • IO就是访问硬盘文件的次数
  • using filesort 有两种算法:双路排序、单路排序(根据IO的次数)
  • MySQL4.1之前默认使用双路排序;双路:扫描2次磁盘(1:从磁盘读取排序字段,对排序字段进行排序(在buffer中进行的排序)2:扫描其他字段)
  • MySQL4.1之后默认使用单路排序:只读取一次(全部字段),在buffer中进行排序。但种单路排序会有一定的隐患(不一定真的是“单路/1次IO”,有可能多次IO)。原因:如果数据量特别大,则无法将所有字段的数据一次性读取完毕,因此会进行“分片读取、多次读取”。
  • 注意:单路排序 比双路排序 会占用更多的buffer。
  • 单路排序在使用时,如果数据大,可以考虑调大buffer的容量大小:
# 不一定真的是“单路/1次IO”,有可能多次IO
set max_length_for_sort_data = 1024

如果max_length_for_sort_data值太低,则mysql会自动从 单路->双路(太低:需要排序的列的总大小超过了max_length_for_sort_data定义的字节数)

① 提高order by查询的策略:

  • 选择使用单路、双路 ;调整buffer的容量大小
  • 避免使用select * …(select后面写所有字段,也比写*效率高)
  • 复合索引,不要跨列使用 ,避免using filesort保证全部的排序字段,排序的一致性(都是升序或降序)

原创文章,作者:修行,如若转载,请注明作者昵称:修行及出处:https://www.xiuxingstudio.com/computer/database/2904.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年2月3日 13:56
下一篇 2022年2月6日 18:55

相关推荐

发表评论

登录后才能评论
在线客服 QQ交流群
分享本页
返回顶部