主页 > MySQL教程 > 正文

MySQL运用索引优化ORDER BY排序句子

创立表&创立索引

create table tbl1 (
id int unique, sname varchar(50),
index tbl1_index_sname(sname desc)
);

在已有的表创立索引语法

create [unique|fulltext|spatial] index 索引名 on 表名(字段名 [长度] [asc|desc]);

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不能运用索引来优化排序的状况

1. 对不同的索引键做 ORDER BY :(key1,key2别离树立索引)

SELECT * FROM t1 ORDER BY key1, key2;


2. 在非接连的索引键部分上做 ORDER BY:(key_part1,key_part2树立联合索引;key2树立索引)

SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;


3. 一起运用了 ASC 和 DESC:(key_part1,key_part2树立联合索引)

SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;


4. 用于查找记载的索引键和做 ORDER BY 的不是同一个:(key1,key2别离树立索引)

SELECT * FROM t1 WHERE key2=constant ORDER BY key1;


5. 假如在WHERE和ORDER BY的栏位上运用表达式(函数)时,则无法运用索引来完成order by的优化

SELECT * FROM t1 ORDER BY YEAR(logindate) LIMIT 0,10;


特别提示:

1>mysql一次查询只能运用一个索引。假如要对多个字段运用索引,树立复合索引。

2>在ORDER BY操作中,MySQL只要在排序条件不是一个查询条件表达式的状况下才运用索引。


上一篇:mysql中int、bigint、smallint 和 tinyint的差异与长度的意义
下一篇:MySQL 字符串截取相关函数总结

PythonTab微信大众号:

Python技能交流合作群 ( 请勿加多个群 ):

群1: 87464755

群2: 333646237

群3: 318130924

群4: 385100854