【问题标题】:MySQl, why would completly the wrong index be used?MySQl,为什么会使用完全错误的索引?
【发布时间】:2011-03-09 18:34:50
【问题描述】:

我一直在优化我的测试服务器上的查询,它与实时服务器具有相同的索引。当我解释两台服务器上的查询时,我得到了一个不同的索引。

这不仅仅是一个微小的差异,它是一个根本不适合的索引。

这是我的查询

SELECT count(Pads.PadID) AS CountOfPadID FROM Pads WHERE ((
RemoveMeDate='2001-01-01 00:00:00') AND (catid between 0 and 11)) 
ORDER BY VersionAddDate DESC;

测试服务器说明

直播服务器说明

这里是实时服务器上的索引,您可以看到索引 Cats 与查询中使用的字段完全无关

我试过USE INDEX (sitempacats) 确实有效,但我只是不明白为什么它会这样做?

【问题讨论】:

  • mysql版本不同吗?
  • 您是否尝试过 mysql 从实时服务器转储表并将其导入测试服务器?测试服务器和实时服务器是否完全一样? mysql版本/编译插件
  • 两台服务器上是否有相同版本的mysql?可能查询优化器在不同版本中的工作方式不同。

标签: mysql sql query-optimization


【解决方案1】:

查询执行中使用的索引不仅取决于您拥有的索引,还取决于数据库中的数据。以及其他几个用于生成执行计划的统计信息。

【讨论】:

  • 是的。只需比较两台服务器上涉及的行数。毫不奇怪,处理 2 行的计划可能与处理 11,530 行的计划不同。
猜你喜欢
  • 2010-11-18
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
相关资源
最近更新 更多