MySQLMySQL如何行使索引优化ORDER BY排序语句

 

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独家建立目录)

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只发生以排序条件不是一个查询条件表达式的动静下才下索引。

 

正文来源CSDN博客,转载请标明出处:http://blog.csdn.net/ryb7899/archive/2010/05/11/5580624.aspx

网站地图xml地图