mysql底层排序原理_Mysql 排序原理

外联排序策略

3张表外联,然后根据第一张的表的某个索引字段排序。 在这种情况下是根据索引进行排序然后进行外联。

0818b9ca8b590ca3270a3433284dd417.png

3张表外联,然后根据第一张表的某些字段进行排序。此时会使用filesort对第一张表进行排序,然后再进行外联。

0818b9ca8b590ca3270a3433284dd417.png

3张表外联,根据后两张表中的字段进行排序。此情况下,先生成关联后的临时表,然后对临时表进行filesort。

0818b9ca8b590ca3270a3433284dd417.png

filesort

filesort有两种排序算法,single-pass和two-pass。

single-pass,单次传输排序,读取查询所需要的所有列,然后进行排序,最后直接返回结果。

two-pass,两次传输排序,首先只读取需要排序的字段和行指针(sort_key, rowid),对其进行排序,然后根据排序结果读取所需要的行。缺点:第二次查询会导致大量的随机IO。 若order by的列的总大小超过max_length_for_sort_data字节,或者order by列是BLOB或TEXT,则采用此算法。其他时候都用single-pass。

filesort总体上来说,如果数据量小就直接在内存进行quicksort。如果数据量大,mysql会先将数据进行分块,每个独立的块进行quicksort,结果放在磁盘上,最后用mergesort 进行合并。

The amount of memory available to filesort() is controlled by @@sort_buffer_size variable

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值