MySQL如何利⽤索引优化ORDERBY排序语MySQL索引通常是被⽤于提⾼WHERE条件的数据⾏匹配或者执⾏联结操作时匹配其它表的数据⾏的搜索速度。
MySQL也能利⽤索引来快速地执⾏ORDER BY和GROUP BY语句的排序和分组操作。
通过索引优化来实现MySQL的ORDER BY语句优化:
1、ORDER BY的索引优化。如果⼀个SQL语句形如:
SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort];
在[sort]这个栏位上建⽴索引就可以实现利⽤索引进⾏order by 优化。
2、WHERE + ORDER BY的索引优化,形如:
SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [value] ORDER BY [sort];
建⽴⼀个联合索引(columnX,sort)来实现order by 优化。
注意:如果columnX对应多个值,如下⾯语句就⽆法利⽤索引来实现order by的优化
SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] IN ([value1],[value2],…) ORDER BY[sort];
3、WHERE+ 多个字段ORDER BY
SELECT * FROM [table] WHERE uid=1 ORDER x,y LIMIT 0,10;
建⽴索引(uid,x,y)实现order by的优化,⽐建⽴(x,y,uid)索引效果要好得多。
MySQL Order By不能使⽤索引来优化排序的情况
* 对不同的索引键做 ORDER BY :(key1,key2分别建⽴索引)
SELECT * FROM t1 ORDER BY key1, key2;
* 在⾮连续的索引键部分上做 ORDER BY:(key_part1,key_part2建⽴联合索引;key2建⽴索引)
SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;
* 同时使⽤了 ASC 和 DESC:(key_part1,key_part2建⽴联合索引)
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
* ⽤于搜索记录的索引键和做 ORDER BY 的不是同⼀个:(key1,key2分别建⽴索引)
sql语句优化方式SELECT * FROM t1 WHERE key2=constant ORDER BY key1;
* 如果在WHERE和ORDER BY的栏位上应⽤表达式(函数)时,则⽆法利⽤索引来实现order by的优化
SELECT * FROM t1 ORDER BY YEAR(logindate) LIMIT 0,10;
特别提⽰:
1>mysql⼀次查询只能使⽤⼀个索引。如果要对多个字段使⽤索引,建⽴复合索引。
2>在ORDER BY操作中,MySQL只有在排序条件不是⼀个查询条件表达式的情况下才使⽤索引。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。