如何解决如何让 mysql-slow.log 不告诉我我没有使用索引?
名为 markets
的表具有以下列:id
、visible
、position
,并且我每次都在可见上创建索引
和慢日志总是
# Time: 2021-05-12T00:46:14.248654Z
# User@Host: tase[tase] @ ip-172-31-22-13.ap-northeast-1.compute.internal [172.31.22.13] Id: 134987
# Query_time: 0.000155 Lock_time: 0.000048 Rows_sent: 7 Rows_examined: 17
SET timestamp=1620780374;
SELECT `markets`.* FROM `markets` WHERE `markets`.`visible` = TRUE ORDER BY `markets`.`position` DESC;
和解释:
+----+-------------+---------+------------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------+------+---------+------+------+----------+-----------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------+------------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------+------+---------+------+------+----------+-----------------------------+
| 1 | SIMPLE | markets | NULL | ALL | index_markets_on_visible| NULL | NULL | NULL | 10 | 70.00 | Using where; Using filesort |
+----+-------------+---------+------------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------+------+---------+------+------+----------+-----------------------------+
1 row in set,1 warning (0.00 sec)
我想知道:
谢谢。
解决方法
SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
它可能会说 ON
。转动它OFF
。 (并且您已经找到了为什么我认为该设置几乎没有用的原因。)
如果你想有一个有用的索引,那就让复合索引INDEX(visible,position)
。
它可能仍然说它没有使用任何索引。这就是原因。 7/17 的行匹配 visible = TRUE
。这超过(大约)表的 20%,因此优化器决定不值得使用索引,但简单地扫描所有 17 行,跳过非 visible
行可能会更快。
另一个注意事项:如果它确实使用了我的索引,它将避免“使用文件排序”,从而进一步提高性能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。