多个coulmn索引(名称,类型)对于带有in运算符的where子句是否有用

时间:2017-01-12 20:19:16

标签: mysql indexing database-indexes

我有一个表,我有一个多列索引(名称,类型)。索引是否有助于查询

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')

假设该表有数百万条记录

2 个答案:

答案 0 :(得分:0)

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

如果您使用IN=OR并不重要,那么查询计划最终应该是相同的。

答案 1 :(得分:0)

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

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