Home  >  Article  >  Database  >  MySQL优化order by导致的 using filesort_MySQL

MySQL优化order by导致的 using filesort_MySQL

WBOY
WBOYOriginal
2016-05-30 17:10:06822browse

using filesort 一般出现在 使用了 order by 语句当中。

 

using filesort不一定引起mysql的性能问题。但是如果查询次数非常多,那么每次在mysql中进行排序,还是会有影响的。

 

这里的优化方式是在order by 的字段建立索引,例如 语句:

 

SELECT * FROM yw_syjgb  ORDER BY result_date desc LIMIT 0,1000;

 

 查看执行计划:

 

+----+-------------+----------+------+---------------+------+---------+------+---------+----------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+----------+------+---------------+------+---------+------+---------+----------------+

| 1 | SIMPLE | yw_syjgb | ALL | NULL | NULL | NULL | NULL | 1312418 | Using filesort |

+----+-------------+----------+------+---------------+------+---------+------+---------+----------------+

 

 

则需要在result_date  建立索引:

 

此时查看执行计划:

 

+----+-------------+----------+-------+---------------+-------------+---------+------+------+-------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+----------+-------+---------------+-------------+---------+------+------+-------+

| 1 | SIMPLE | yw_syjgb | index | NULL | result_date | 6 | NULL | 1000 | NULL |

+----+-------------+----------+-------+---------------+-------------+---------+------+------+-------+

 

可以看到执行计划中使用索引后没有 Using filesort

 

需要注意的是:由于 Using filesort是使用算法在 内存中进行排序,MySQL对于排序的记录的大小也是有做限制:max_length_for_sort_data,默认为1024

show variables like '%max_length_for_sort_data%';

 

+--------------------------+-------+

| Variable_name | Value |

+--------------------------+-------+

| max_length_for_sort_data | 1024 |

+--------------------------+-------+

经过笔者测试,如果排序查询的数据两大于这个默认值的话,还是会使用Using filesort。

 

总结一句,当排序查询的数据量在默认值的范围内是,在排序的字段上加上索引可以提升MySQL查询的速度。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn