MySQL多索引与多列索引进行搜索

时间:2011-07-20 03:04:56

标签: mysql indexing

在我写的软件中,我可以搜索给定的表格以获取信息。搜索表单有5个字段,所有这些字段当然对应于表格中的不同列,但所有字段都是可选字段。

我的问题是关于多列索引是否有效以及为其构建查询的正确方法。

如果我有5个列的单个索引,并且我构建了一个查询来搜索它们,那么当涉及到该索引中我不搜索的字段时,我是否会这样做:

field1 = 10 AND field2> 0 AND ...

或者我应该不包括未使用的列?

我一直在寻找有关多列索引的信息,但是当你需要跳过给定索引中的一个列或者你根本不关心那个列时,我似乎无法找到该怎么做在那个特定的例子中。

3 个答案:

答案 0 :(得分:3)

你必须在MySQL中理解(在InnoDB的情况下)它只使用索引的最左前缀。因此,如果索引位于Field1 + Field2中,则仅使用 WHERE 中的Field2进行查询时无法使用整个索引。

如果Field1 + Field2 + Field3是索引,则 WHERE 中只有Field1 & Field3的查询会发生同样的情况。

选项1

如果要优化每个搜索,则必须为每个搜索方案创建单独的索引。但是,如果表很大,那么索引也会变得非常大。 如果这些搜索查询经常发生,那将是值得的。

选项2

如果您的搜索具有低选择性(即性别),您可以使用一个漂亮的技巧,方法是将低选择性列放在最左侧,并使用Gender IN(M, F)将其包含在< strong> WHERE 子句以及其他列以使用整个索引。

答案 1 :(得分:1)

对于带标准的查询

field1 = 10 AND field2 > 0

您需要具有复合索引field1 + field2(按此特定顺序)

答案 2 :(得分:0)

这取决于您的查询。如果您经常使用field1和field2进行许多查询,那么有一个复合索引是有意义的。否则,你可能会在多个单列索引上得到很好的结果。