【发布时间】:2013-01-22 18:42:41
【问题描述】:
我有一个相当简单的 mysql 查询,其中包含一些内部连接,然后是 where 子句。我已经为连接中使用的所有列以及主键创建了索引。我还有一个包含 IN 运算符的 where 子句。当只有 5 个或更少的 id 被传递到 IN 子句时,查询优化器使用我的索引之一在合理的时间内运行查询。当我使用解释时,我看到类型是范围,键是 PRIMARY。我的问题是,如果我在 IN 子句中使用超过 5 个 id,优化器会忽略所有可用的索引并且查询运行速度非常慢。当我使用解释时,我看到类型是 ALL,键是 NULL。
有人可以解释一下这里发生了什么以及我该如何解决这个问题。
谢谢
【问题讨论】:
-
你能展示你到目前为止尝试过的东西吗=)可能是你的表模式和查询..
-
当您使用多个 OR 语句而不是 IN 时,是否也会发生这种情况?
-
@Mt.Schneiders 是的!当我用 OR 替换 IN 时,它的行为完全相同。
-
很奇怪。什么是表引擎? MyISAM 还是 InnoDB?此外,您是否尝试过“ANALIZE TABLE”命令?
标签: mysql query-optimization sql-execution-plan