关于ORDER BY字段是否增加索引

  • Post author:
  • Post category:其他


在MySQL中,支持两种排序方式:FileSort和Index排序。

Index排序的效率更高。

Index排序:索引可以保证数据的有序性,因此不需要再进行排序。

FileSort排序:一般在内存中进行排序,占用CPU较多。如果待排结果较大,会产生临时文件I/O到磁盘进行排序,效率较低。

所以使用ORDER BY子句时,应该尽量使用Index排序,避免使用FileSort排序。

当然具体优化器是否采用索引进行排序,你可以使用 explain 来进行执行计划的查看。


优化建议:

  1. SQL中,可以在WHERE子句和ORDER BY子句中使用索引,目的是

    在 WHERE 子句中避免全表扫描,ORDER BY子句避免使用 FileSort 排序。


    当然,某些情况下全表扫描,或者FileSort排序不一定比索引慢。但总的来说,我们还是要避免,以提高查询效率。

    一般情况下,优化器会帮我们进行更好的选择,当然我们也需要建立合理的索引。
  2. 尽量Using Index完成ORDER BY排序。

    如果WHERE和ORDER BY相同列就使用单索引列;如果不同使用联合索引。
  3. 无法Using Index时,对FileSort方式进行调优。



版权声明:本文为tzzt01原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。