【问题标题】:Will a multi-coulmn Index (name,type) be useful for where clause with in operator多列索引(名称,类型)对带有 in 运算符的 where 子句有用吗
【发布时间】:2017-01-12 20:19:15
【问题描述】:

我有一个表,其中有一个多列索引(名称、类型)。索引是否对像这样的查询有帮助

Select *
from [table_name] a
where a.name = '[some_name]' and a.type in ('1','2','3')

或者最好有类似的查询,

Select *
from [table_name] a
where a.name = '[some_name]' and (a.type = '1' or a.type = '2' or a.type = '3')

假设表有数百万条记录

【问题讨论】:

  • 你可以自己回答这个问题,使用EXPLAIN分析查询的索引使用情况。

标签: mysql indexing database-indexes


【解决方案1】:

该索引很有可能会有所帮助。我说最有可能是因为它取决于name 列的性质。如果有数百万行,但 Name 只有几个不同的可能值(selectivity 较低的条件),那么索引可能没有那么有用,但这似乎不太可能。

不管你使用IN还是=OR,查询计划最终应该是一样的。

【讨论】:

    【解决方案2】:

    一个很大的因素是 SELECT * 。如果您的 WHERE 子句将拉回表的 80%,那么查询扫描整个表而不是使用索引执行 LOOKUP 可能会更快,因为需要表来满足 *。

    如果您只选择有限数量的列并且所有这些列都存在于索引中,那么只需读取索引而不需要读取表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-09
      • 2011-01-18
      • 2019-09-30
      • 2011-01-10
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多