[英]How to avoid Using Filesort in "!=" mysql
请帮我! 如何优化查询,如:
SELECT idu
FROM `user`
WHERE `username`!='manager'
AND `username`!='user1@yahoo.com'
ORDER BY lastdate DESC
这是解释:
explain SELECT idu FROM `user` WHERE `username`!='manager' AND `username`!='ser1@yahoo.com' order by lastdate DESC;
+----+-------------+-------+------+----------------------------+------+---------+------+--------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+----------------------------+------+---------+------+--------+-----------------------------+
| 1 | SIMPLE | user | ALL | username,username-lastdate | NULL | NULL | NULL | 208478 | Using where; Using filesort |
+----+-------------+-------+------+----------------------------+------+---------+------+--------+-----------------------------+
1 row in set (0.00 sec)
避免在大型数据库中进行文件排序。
由于此查询只是扫描所有行,因此您需要在lastdate
上建立索引以避免 MySQL 必须手动对结果进行排序(使用文件排序,这并不总是到磁盘/临时表)。
为了获得超级读取性能,添加以下多列“覆盖”索引:
user(lastdate, username, idu)
“覆盖”索引将允许 MySQL 只扫描索引而不是实际的表数据。
如果使用 InnoDB 并且上述任何列是您的主键,则索引中不需要它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.