除非明确指定,否则MySQL组合索引不起作用

时间:2015-11-13 08:55:11

标签: mysql indexing

我有一个包含三列的表,让我们说它们是A,B和C.每列都由它自己的单独索引编制索引。我试图做以下查询:

select MainTable.* from MainTable
-- And here are some additional joins
WHERE A = <value A> and B = <value B> and C = <value C>
-- and some additional filterings

我注意到查询时间与过滤所涉及的列数成正比。也就是说,如果我只用A过滤,它会运行0.5秒。如果我按A和B过滤,它会运行0.4秒(因为表格非常大)。如果我按A,B和C过滤,它会运行0.8秒,这是不合适的。

所以我在(A,B,C)上创建了一个复合索引并再次运行它。但是,它仍然运行缓慢,因为由于某种原因,MySQL倾向于使用单列索引而不是新列索引,直到最后我做了这样的查询:

select MainTable.* from MainTable use index MyNewIndex
-- And here are some additional joins
WHERE A = <value A> and B = <value B> and C = <value C>
-- and some additional filterings

在这里,一切都运行得很快,但问题是,我无法在应用程序级别指定此类(我只是不支持这个查询构建器)。那么,我如何让mysql使用这个索引呢?只需删除单列索引?但是,仅使用其中一列的过滤的其他查询是否能像以前那样快速运行?

0 个答案:

没有答案