Mysql - 哪个索引更好?

时间:2015-08-17 04:44:06

标签: mysql indexing

我有这样的2栏:

A栏| B栏

这些列是可搜索的。我想同时搜索它们。我应该索引一对密钥(A,B)或索引单独的A和B.哪一个更好?

4 个答案:

答案 0 :(得分:1)

(A, B)上的综合索引可用于某些涉及 A的查询以及涉及 AB,但从不仅涉及B的查询。

哪个索引更好取决于您对数据执行的查询。

不仅如此,索引中字段的顺序也是相关的,因为超过(A, B)的索引和超过(B, A)的索引在不同情况下可能会有用。

更复杂的是,一些查询可以单独使用索引而无需访问表中的数据,例如,如果您的查询是SELECT B FROM table WHERE A = 5并且索引超过(A, B),则引擎可能只遍历索引,因为它包含您需要的所有数据。

答案 1 :(得分:0)

通常,如果您只搜索包含两个列的值,则两者之间的单个复合索引会更好。这意味着您将获得一组仅包含索引本身的组合值的行。如果您有单个或单独的密钥,则必须在初始加载后删除不相关的行,或者执行两次加载并计算出它们的交集。

如果您认为您可能想要独立搜索任一列,我也会在每个列上都有单独的索引。

然而,这是基于一般性。您应该使用您可以使用的工具(例如MySQL中的explain)来评估查询的性能,使用代表您在真实环境中看到的内容的数据。

答案 2 :(得分:0)

如果要同时搜索这两个字段,则需要在两个字段中都使用组合索引。

如果在A和B字段中都创建了索引,则可以在查询中使用这两个字段时直接查找条目。此外,您可以将此索引用于仅涉及A。

的查询

如果每个字段只有单独的索引,则数据库在查询中只能使用其中一个。然后它将扫描所有剩余的条目以找到第二个字段。

请参阅此处以供参考:http://use-the-index-luke.com/sql/where-clause/the-equals-operator/concatenated-keys

答案 3 :(得分:0)

案例1:

WHERE A = x AND B = y
ORDER BY B

键:(A,B)

案例2:

WHERE A = x AND B = y
ORDER BY A

键:(B,A)

案例3:

WHERE A = x OR B = y (any order)

键:(A),(B)