我有一个类似
的查询SELECT * FROM Table_name WHERE column1 = '1' AND column2 IN ('1','2','3');
且索引在(column1, column2, column3)
上存在。我上面的查询是否使用了我创建的索引?基本上我与IN
关键字混淆,没有这个,它正在使用,但与IN
我不确定。
MySQL可以使用IN
条件的索引。如果您只有column2
上的索引,则很可能使用它。如果在column1
和column2
上都有索引,则只能使用其中一个,并且查询规划器必须决定哪一个更适合特定的查询。如果你在(column1, column2)
上有一个复合索引,那么它应该能够使用该索引来匹配WHERE
子句中的两列。
MySQL 能够使用索引与IN
..现在,是 MySQL使用索引在特定的查询?那么,询问查询规划器!
在这种情况下,可以使用(column1, column2, ..)
上的索引 -因为所有向左的组件都已满足。也就是说,可以在column1(对于=
)上执行索引查找,然后在column2(对于IN
)上执行索引查找。但是,同样,询问查询规划器,因为意外的计划并非闻所未闻;仅仅因为查询规划器可以选择索引并不意味着它一定会选择索引。
参见EXPLAIN,如何提问:
当EXPLAIN与一个可解释的语句一起使用时,MySQL显示来自优化器的关于语句执行计划的信息。也就是说,MySQL解释了它将如何处理语句,包括关于表如何连接以及以何种顺序连接的信息[如索引使用].
. .在EXPLAIN的帮助下,您可以看到应该在表中添加索引,以便通过使用索引查找行来加快语句的执行速度。