加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

怎样在Mysql中优化order by语句

发布时间:2022-02-15 10:11:20 所属栏目:MySql教程 来源:互联网
导读:这篇文章给大家介绍如何在Mysql中优化order by语句,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 MySQL中的两种排序方式 1.通过有序索引顺序扫描直接返回有序数据 因为索引的结构是B+树,索引中的数据是按照一定顺序进行排列的,所
       这篇文章给大家介绍如何在Mysql中优化order by语句,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
 
       MySQL中的两种排序方式
 
1.通过有序索引顺序扫描直接返回有序数据
 
因为索引的结构是B+树,索引中的数据是按照一定顺序进行排列的,所以在排序查询中如果能利用索引,就能避免额外的排序操作。EXPLAIN分析查询时,Extra显示为Using index。
 
2.Filesort排序,对返回的数据进行排序
 
所有不是通过索引直接返回排序结果的操作都是Filesort排序,也就是说进行了额外的排序操作。EXPLAIN分析查询时,Extra显示为Using filesort。
 
ORDER BY优化的核心原则
 
尽量减少额外的排序,通过索引直接返回有序数据。
 
ORDER BY优化实战
  
首先要注意:
 
MySQL一次查询只能使用一个索引,如果要对多个字段使用索引,建立复合索引。
 
ORDER BY优化
 
 查询的字段,应该只包含此次查询使用的索引字段和主键,其余的非索引字段和索引字段作为查询字段则不会使用索引。
 
只查询用于排序的索引字段,可以利用索引排序:
 
explain select store_id,email from customer order by store_id,email;
  
但是要注意,排序字段在多个索引中,无法使用索引排序,查询一次只能使用一个索引:
 
explain select store_id,email,last_name from customer order by store_id,email,last_name;
  
只查询用于排序的索引字段和主键,可以利用索引排序:
 
画外音:MySQL默认的InnoDB引擎在物理上采用聚集索引这种方式,按主键进行搜索,所以InnoDB引擎要求表必须有主键,即使没有显式指定主键,InnoDB引擎也会生成唯一的隐式主键,也就是说索引中必定有主键。

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!