为啥在另一个数据库中执行相同查询时不使用索引?
Posted
技术标签:
【中文标题】为啥在另一个数据库中执行相同查询时不使用索引?【英文标题】:Why not use an index when doing the same query in another database?为什么在另一个数据库中执行相同查询时不使用索引? 【发布时间】:2019-04-25 02:00:36 【问题描述】:我有两个数据库。 一个是产品数据库(mysql) 另一个是开发数据库(mysql)
当我使用解释键时,开发数据库使用索引, 但产品数据库不起作用。
相同的查询 相同的数据库(开发数据库是产品的副本) 相同的索引.....
所以我检查了索引,“显示索引”...
但索引相同。
解释开发数据库的结果
解释产品数据库的结果
我希望“p”表使用索引“idx_payment_tb”
【问题讨论】:
如果可以,请包含一些示例数据和您的原始查询。我最近一直在自己使用索引,我发现索引主要用于WHERE
运算符。我的一些前端同事抱怨他们的一些操作需要很长时间才能加载。当我检查查询时,WHERE
运算符中的某些字段未编入索引。所以我为那里的每个字段创建了索引,当我比较我的 EXPLAIN
时,我确实发现了一些改进。
一个“prod 副本”,尤其是最近的一个,很可能意味着统计信息比 prod 数据库“更新”得多,并且索引也可能没有那么碎片化。用非常有限的信息很难得出结论。
【参考方案1】:
当优化器选择不使用索引时,通常是有充分理由的——即数据分布使得使用索引实际上会更慢。
请将SHOW CREATE TABLE
和EXPLAIN SELECT
提供为文本,而不是图像。优化器可能回避索引的原因有很多;我们可能会告诉你这次使用了哪个原因。
【讨论】:
以上是关于为啥在另一个数据库中执行相同查询时不使用索引?的主要内容,如果未能解决你的问题,请参考以下文章