Heim > Datenbank > MySQL-Tutorial > Hauptteil

MySQL优化order by导致的 using filesort_MySQL

WBOY
Freigeben: 2016-05-30 17:10:06
Original
820 Leute haben es durchsucht

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查询的速度。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage