MySQL:性能监控之select与sort

  • select_scan:全表扫描。在explain中type会显示为All,原因是查询没有用索引。因为全表扫描一般比较慢,所以应该尽量避免

  • select_full_join:和select_scan差不多,区别是select_full_join代表的是第二张以及之后的表。explain中的类型也是all,原因是表连接所用的字段上没有索引。它对性能有更为严重的影响,绝对要避免,所以用于连接的字段上一般都要加索引。

  • select_range:需要从硬盘读表在一段范围内的行。在explain中显示为range,说明使用了索引查询记录在硬盘上的位置

  • select_range_check:比select_full_join好一点,和select_range差不多。区别是MySQL不能确定它是否能够使用一个范围来做连接,如果可以会使用范围,如果不可以仍会使用全表扫描。在explain中type也是all,但是extra会有range checked for each record(index map)的名。

  • select_full_range_join:和select_range_check类似。不管mysql可以肯定它能够使用范围查找。这时explain中的类型是range。这也是需要优化的。

  • sort_scan和sort_range
    不管是order by还是group by(除了使用order by null的group by),主要是三不:
    (1) 通过where条件找到记录
    (2) 排序
    (3) 按照拍好的顺序读取记录。
    如果第二步不被跳过,那么第三步中就会有sort_scan或者sort_range。如果第一步是select_scan,那么第3步是sort_scan。如果第一步是select_range,那么第三步是sort_range。但是sort_scan和sort_range功能上没有区别,都是将需要的记录按照顺序读出来,所以性能是一样的。

  • sort_merge_passes:共两步,MYSQL首先会尝试在内存中做排序,使用的内存大小由系统变量sort_buffer_size决定,如果它的大小不够把所有的记录都读到内存中,MySQL就会把每次在内存中排序的结果存到临时文件中,等MYSQL找到所有记录之后,再把临时文件中的记录做一次排序。这再次排序就会增加sort_merge_passes。实际上,MYSQL会用另一个临时文件来存再次排序的结果,所以通常看到sort_merge_passes增加的数值是见临时文件数的两倍,因为用到了临时文件,所以速度可能会比较慢,增肌sort_buffer_size会减少sort_merge_passes和创建临时文件的次数。但是盲目增加sort_buffer_size不一定提高速度,见

  • sort_row:这代表在第二步中有多少记录被排序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值