手机网站切图新郑做网站
手机网站切图,新郑做网站,网站后台管理系统 asp,百度网站登录排序优化 对于order by关键字进行优化前#xff0c;首先大家要先知道索引不仅用于检索还用于排序 MySQL支持两种方式的排序#xff0c;index和filesort#xff0c;index效率高#xff0c;可以根据索引本身来完成排序#xff0c;filesort效率较低 最好在进行explain进行分析… 排序优化 对于order by关键字进行优化前首先大家要先知道索引不仅用于检索还用于排序 MySQL支持两种方式的排序index和filesortindex效率高可以根据索引本身来完成排序filesort效率较低 最好在进行explain进行分析时不要出现filesort 使用index 通过有序索引而直接取得有序的数据这样就可以不需要进行任何排序操作即可满足客户端要求的有序数据 order by 语句使用索引最左前列 使用where 子句和order by子句组合满足索引最左前列 如果使用多字段排序需要保证排序方向一致要么就全是ASC要么就全是DESC show status like sort%;-- Sort_merge_passes 0-- Sort_range 1-- Sort_rows 2-- Sort_scan 0 使用filesort 在使用explain时如果发现在Extra信息中出现Using filesort表示使用了filesort排序 需用通过Mysql的排序算法将存储引擎中返回的数据进行排序然后再将排序后的数据返回给客户端 如果逼不得已使用filesortMySQL中filesort有两种算法双路排序和单路排序 双路排序(两次传输排序) 4.1之前使用的是双路排序即需要扫描两次磁盘读取行指针和order by列对他们进行排序然后扫描已经排好序的列表按照列表中的值重新从列表中读取对应的数据输出回表第二次读取数据的时候是读取的排序后的所有记录会产生大量的随机IO 取出满足过滤条件的用于排序条件的字段以及可以直接定位到行数据的行指针信息在Sort Buffer中进行实际的排序操作然后利用排好序之后的数据根据指针信息返回表中取得客户端请求的其他字段的数据 此时在trace中看到的信息是 sort_key,rowid 单路排序(单次传输排序) 4.1之后出现单路排序从磁盘中查询所有列按照order by列在buffer进行排序然后扫描排序后的列表进行输出减少了数据的二次访问节省了IO操作 根据过滤条件一次取出排序字段以及客户端请求的所有其他字段的数据并将不需要排序的字段存放在一块内存区域中然后在sort Buffer中将排序字段和行指针信息进行排序最后再利用排序后的行指针与存放在内存区域中的其他字段一起的行指针信息进行匹配合并结果集 但是如果需要返回的列非常多会占用大量的空间 此时在trace中看到的信息是sort_key,additional_fields或sort_key,packedadditional_fields 两个重要的配置 sort_buffer_size : 该配置是配置的sort buffer的大小增大该配置可以尽量减少在排序过程中对需要排序的数据进行分段如果进行分段会导致MySQL不得不使用临时表来进行数据交换 max_length_for_sort_data: 当query的字段大小总和小于max_length_for_sort_data且字段中不包含text或者blob类型时会使用单路排序 禁忌 有时候需要排序的字段同时存在于两个表或者在经过一次join之后才进行排序此时仅使用sort Buffer已经不能满足要求了需要使用临时表来将之前join的结果集存放在临时表中再将临时表的数据提取到sort Buffer中进行操作此时性能可就很差了使用explain执行计划可以看到extra字段中为using temporary和using filesort https://zhhll.icu/2021/数据库/关系型数据库/MySQL/进阶/8.排序优化/ 本文由 mdnice 多平台发布
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88803.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!