我有个疑问
SELECT * FROM Table_name WHERE column1 = '1' AND column2 IN ('1','2','3');并且索引存在于(column1, column2, column3)上。我的上述查询是否使用了我已经创建的索引?基本上,我对IN关键字感到困惑,如果没有这个关键字,它正在使用,但是对于IN,我不确定。请解释一下。
发布于 2014-03-12 06:24:40
MySQL能够与IN一起使用索引。现在,MySQL是否在特定查询中使用索引?好吧,去问查询规划师!
在这种情况下,可以使用(column1, column2, ..)之上的索引--因为所有左侧组件都已满足。也就是说,可以在column1 (针对=)和column2 (用于IN)上执行索引查找。但是,询问查询规划师,因为意外的计划并不是闻所未闻的;仅仅因为查询规划者可以选择索引并不意味着它会选择索引。
有关如何问:请参见解释:
当解释与可解释语句一起使用时,MySQL将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL解释了它将如何处理该语句,包括有关表如何连接和按什么顺序连接的索引使用等信息。 。。在解释的帮助下,您可以看到应该在哪里向表添加索引,以便通过使用索引查找行来使语句执行得更快。
发布于 2014-03-12 06:23:55
MySQL可以使用带有IN条件的索引。如果您只有column2上的索引,则很可能会使用它。如果您对每个column1和column2都有索引,那么只能使用其中一个索引,并且查询计划器必须决定哪个索引对特定的查询更好。如果在(column1, column2)上有一个复合索引,那么它应该能够使用该索引来匹配WHERE子句中的两列。
https://stackoverflow.com/questions/22343449
复制相似问题