IN Query是否在MySql中使用了索引?

时间:2014-03-12 06:17:12

标签: mysql indexed

我有一个像

这样的查询
SELECT * FROM Table_name WHERE column1 = '1' AND  column2 IN ('1','2','3');

并且(column1, column2, column3)上存在索引。我上面的查询是否使用了我创建的索引?基本上我对IN关键字感到困惑,没有使用它,但是IN我不确定。请解释一下。

2 个答案:

答案 0 :(得分:1)

MySQL可以使用IN条件的索引。如果您只有column2的索引,则很可能会使用它。如果每个column1column2都有索引,则只能使用其中一个索引,并且查询计划程序必须确定哪个索引对于特定查询更好。如果您在(column1, column2)上有一个复合索引,那么它应该能够使用该索引来匹配WHERE子句中的两个列。

答案 1 :(得分:0)

MySQL 能够使用带IN的索引..现在, MySQL使用特定查询中的索引?好吧,询问查询计划员

在这种情况下,可以使用(column1, column2, ..) 上的索引 - 因为所有向左的组件都已满足。也就是说,索引搜索可以在column1上进行(对于=),然后在column2上进行(对于IN)。但同样,询问查询计划器,因为意外的计划并非闻所未闻;只是因为查询规划器可以选择一个索引并不意味着它会。

请参阅EXPLAIN,了解如何提问:

  

当EXPLAIN与可解释的语句一起使用时,MySQL会显示优化器中有关语句执行计划的信息。也就是说,MySQL解释了它将如何处理语句,包括关于如何连接表以及以何种顺序连接的信息[如索引用法] ..

     

..在EXPLAIN的帮助下,您可以看到应该在哪里向表添加索引,以便通过使用索引查找行来更快地执行语句。