Mysql 多coulmn索引(名称、类型)对带有in运算符的where子句有用吗

Mysql 多coulmn索引(名称、类型)对带有in运算符的where子句有用吗,mysql,indexing,database-indexes,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') 假设

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

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

假设该表有数百万条记录

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


无论您在或=和或中使用
,查询计划都应该是相同的。

一个重要因素是选择*。如果WHERE子句将收回80%的表,那么查询可能会更快地扫描整个表,而不是使用索引执行查找,因为需要该表来完成*


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

您可以使用来分析查询的索引使用情况,自己回答此问题。