mysql - 非常小的 MySQL 表会忽略索引吗?

标签 mysql mariadb

打开log_queries_not_using_indexes后,我注意到一个查询正在快速填满慢速查询日志:

从 abc 中选择 abc.* 哪里 abc.id 不在( 从 zyx 中选择不同的 abc_id 其中 id = 12345 );

abc很小,只有3行数据。 zyx 相对较大,有超过 100,000 行数据。

abc.id 有一个索引,但是当我 EXPLAIN 查询时,该索引未在 key 下列出>possible_keys。这解释了为什么查询显示在慢速日志中,但我的问题是,为什么它不使用索引?

简而言之,我有两个问题:

  1. 非常小的表会忽略索引吗?我明白为什么,对 3 行数据使用索引并不能节省太多时间。
  2. 如果是这样,如何防止此查询淹没我的慢查询日志?

感谢您的宝贵时间! :)

其他信息(如果需要):

我已经运行了ANALYZE TABLE abc,因为我读到有时会修复该问题。添加索引后我还重新启动了 MariaDB。

更多解释:select_type=PRIMARY、table=abc、type=ALL、possible_keys=NULL、key=NULL、key_len=NULL、ref=NULL、rows=3、Extra=Using哪里

最佳答案

Do very small tables ignore indexes?

是的。当可以在单个磁盘访问中读取整个表时,执行单独的磁盘访问来读取索引是没有意义的。

If so, how can I prevent this query from flooding my slow query log?

关闭log_queries_not_using_indexes。这是默认情况下未启用的原因之一。

关于mysql - 非常小的 MySQL 表会忽略索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54718517/

相关文章:

MySQL 在 EAV 表中按值排序?

mysql - 如何选择列及其最大值

mysql - 尝试导入数据库时​​程序中断

php - 为动态输入数组插入空值

mysql - 如何访问我的 docker mariadb?

php - 寻找在 Cron 上构建提要阅读器/聚合器的最佳实践

php - 个人资料页面不显示用户个人资料信息或更新

c# - MySQL 连接抛出空引用

MYSQL/MardiaDB 'recycle bin'

mysql - pip install mariadb 的问题 - 找不到 mariadb_config