mysql织梦索引优化之MySQL Order By索引优化


本文整理自网络,侵删。

在一些情况下,MySQL可以直接使用索引来满足一个ORDER BY 或GROUP BY 子句而无需做额外的排序。尽管ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的ORDER BY 字段在WHERE 子句中都被包括了。

使用索引的MySQL Order By

下列的几个查询都会使用索引来解决ORDER BY 或GROUP BY 部分:

SELECT * FROM t1 ORDER BY key_part1,key_part2,... ;

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

SELECT * FROM t1 WHERE key_part1=constant GROUP BY key_part2;

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

SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC;

不使用索引的MySQL Order By

在另一些情况下,MySQL无法使用索引来满足ORDER BY,尽管它会使用索引来找到记录来匹配WHERE 子句。这些情况如下:

* 对不同的索引键做ORDER BY :

SELECT * FROM t1 ORDER BY key1, key2;

* 在非连续的索引键部分上做ORDER BY:

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

* 同时使用了ASC 和DESC:

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

* 用于搜索记录的索引键和做ORDER BY 的不是同一个:

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

* 有很多表一起做连接,而且读取的记录中在ORDER BY 中的字段都不全是来自第一个非常数的表中(也就是说,在EXPLAIN 分析的结果中的第一个表的连接类型不是const)。

* 使用了不同的ORDER BY 和GROUP BY 表达式。

* 表索引中的记录不是按序存储。例如,HASH 和HEAP 表就是这样。

通过执行EXPLAIN SELECT ... ORDER BY,就知道MySQL是否在查询中使用了索引。如果Extra 字段的值是Using filesort,则说明MySQL无法使用索引。详情请看"7.2.1 EXPLAIN Syntax (Get Information About a SELECT)"。当必须对结果进行排序时,MySQL 4.1以前 它使用了以下filesort 算法:

1. 根据索引键读取记录,或者扫描数据表。那些无法匹配WHERE 分句的记录都会被略过。

阅读剩余部分

相关阅读 >>

分享两个dedecms分页样式css代码

dedecms自定义联动类别调用及修改方法

详解织梦模板dedecms对discuz论坛的一些常用调用代码

dedecms防止被挂马必看安全知识

dedecms自定义表单增加验证码的方法分享

dedecms中tags页面显示错位的解决方法

dedecms 5.6 完美实现伪静态的方法附打包文件下载

linux下安装dedecms及安全设置教程

织梦DedeCMS获取当前栏目路径及栏目名称的方法

dedecms内容页上下篇文章标题字数设置控制方法

更多相关阅读请进入《织梦DedeCMS》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...