mysql 排序长度限制之max_length_for_sort_data以及mysql两种排序算法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql 排序长度限制之max_length_for_sort_data以及mysql两种排序算法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1978字,纯文字阅读大概需要3分钟。
内容图文
![mysql 排序长度限制之max_length_for_sort_data以及mysql两种排序算法](/upload/InfoBanner/zyjiaocheng/514/c4acf573e62245cb8e5aec2162470cbd.jpg)
SET max_length_for_sort_data = 1024
SHOW VARIABLES LIKE ‘%max_length_for_sort_data%‘;
查询:SELECT * FROM CS_COLUMNS ORDER BY table_name,column_name LIMIT 0,100
错误代码: 1815
Internal error: IDB-2015: Sorting length exceeded. Session variable max_length_for_sort_data needs to be set higher.
执行耗时 : 7.171 sec
mysql有两种文件排序算法(双路排序和单路排序),如果需要排序的列的总大小加上order by列的大小超过了 max_length_for_sort_data定义的字节,mysql就会使用双路排序,当任何需要的列甚至不是用order by的列(text.blob的时候),也会使用双路排序,(可以使用substtring() 把这些列转化为可以单路排序的列)。
可以通过改变 max_length_for_sort_data变量的值来影响mysql选择的算法。因为单路排序为将要排序的每一行创建了固定的缓冲区,varchar列的最大长度是 max_length_for_sort_data规定的值,而不是排序数据的实际大小。
当mysql不得不对text。blob列进行排序时,它只会使用前缀并忽略剩余的值,这是因为不得不分配固定大小的结构来容纳数据并且从外部存储中将前缀拷贝回结构中,可以使用max_sort_length定义前缀应该是多大。
mysql并不会真正的显示使用的是哪种算法,如果增大了max_length_for_sort_data的值,并且磁盘使用率上升,cpu使用率下降,sort_merge_passes的值比以前增加的更快,也许该强制排序使用单路排序算法。
双路排序:
读取行指针和order by列,对他们进行排序,然后扫描已经排序好的列表,按照列表中的值重新从列表中读取对应的数据输出。
双路排序的开销可能会非常巨大,因为他会读取表两次,第二次读取会引发大量的随机IO,对于myisam涞说,这个代价尤其昂贵,myisam表利用系统调用去提取每行的数据。
单路排序:
读取查询需要的所有列,按照order by 列对他们进行排序,然后扫描排序后的列表进行输出,它的效率更快一些,避免了第二次读取数据。并且把随机IO变成了顺序IO,但是它会使用更多的空间,因为它把每一行都保存在内存中了。
mysql 排序长度限制之max_length_for_sort_data以及mysql两种排序算法
标签:order 长度 myisam 代码 mysql limit 需要 sel ESS
本文系统来源:https://www.cnblogs.com/zhjh256/p/11605192.html
内容总结
以上是互联网集市为您收集整理的mysql 排序长度限制之max_length_for_sort_data以及mysql两种排序算法全部内容,希望文章能够帮你解决mysql 排序长度限制之max_length_for_sort_data以及mysql两种排序算法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。