我有这样的2栏:
A栏| B栏
这些列是可搜索的。我想同时搜索它们。我应该索引一对密钥(A,B)或索引单独的A和B.哪一个更好?
答案 0 :(得分:1)
(A, B)
上的综合索引可用于某些涉及 A
的查询以及涉及 A
和B
,但从不仅涉及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)