开机后log_queries_not_using_indexes
,我注意到一个查询正在快速填满慢速查询日志:
SELECT abc.* FROM abc
WHERE abc.id
NOT IN (
SELECT DISTINCT abc_id FROM zyx
WHERE id = 12345
);
abc
非常小,只有3行数据。zyx
数据量比较大,超过10万行数据。
abc.id
有一个索引,但是当我EXPLAIN
查询中,索引未在其中列出key
nor possible_keys
。这解释了为什么查询显示在慢日志中,但我的问题是,为什么它不使用索引?
简而言之,我有两个问题:
- 非常小的表会忽略索引吗?我明白为什么,对 3 行数据使用索引并不能节省太多时间。
- 如果是这样,如何防止此查询淹没我的慢查询日志?
感谢您的时间! :)
附加信息(如果需要):
我跑了ANALYZE TABLE abc
正如我所读到的,有时可以解决这个问题。添加索引后我还重新启动了 MariaDB。
更多的EXPLAIN
: select_type=PRIMARY、table=abc、type=ALL、possible_keys=NULL、key=NULL、key_len=NULL、ref=NULL、rows=3、Extra=使用 where
非常小的表会忽略索引吗?
是的。当可以在单个磁盘访问中读取整个表时,执行单独的磁盘访问来读取索引是没有意义的。
如果是这样,如何防止此查询淹没我的慢查询日志?
关log_queries_not_using_indexes
。这是默认情况下不打开的原因之一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)