首页 > 解决方案 > 为什么在另一个数据库中执行相同的查询时不使用索引?

问题描述

我有两个数据库。一个是产品数据库(mysql)另一个是开发数据库(mysql)

当我使用解释键时,开发数据库使用索引,但产品数据库不起作用。

相同的查询相同的数据库(开发数据库是产品的副本)相同的索引.....

所以我检查了索引,“显示索引”...

但相同的索引。

解释开发数据库的结果 在此处输入图像描述

解释产品数据库的结果 在此处输入图像描述

我希望“p”表使用索引“idx_payment_tb”

标签: mysqlindexingexplain

解决方案


当优化器选择不使用索引时,通常是有充分理由的——即数据分布使得使用索引实际上会更慢。

请提供SHOW CREATE TABLEEXPLAIN SELECT作为文本,而不是图像。优化器可能回避索引的原因有很多;我们可能会告诉你这次使用了哪个原因。

  • 如果它是一个小表,为什么要麻烦索引。
  • 如果正在使用的键在表中出现“很多”(这可能在您的开发和产品之间有所不同),则索引和数据之间的来回弹跳可能会更慢。
  • 两台机器的统计数据可能不同。

推荐阅读