SQL n 到 m table 复合键和单个索引
SQL n to m table Composite Key and single indices
我在涉及简单 n 对 m 关系的当前任务中遇到问题 table。
在我的 table 中,我有以下列:
(a): FK 到 table_a
(b): FK 到 table_b
通常的方法是在 (a) 和 (b) 上创建一个复合主键,让我能够有效地搜索:
(一)
(a) & (b)
但我还需要能够单独搜索 (b) 的效率。所以总的来说,这是我的搜索场景:
(一)
(b)
(a) & (b)
创建
会不会更好
1. (a) & (b) 上的复合 PK 和 (b) 上的另一个单一索引?
2. 或者在 (a) 和 (b) 上创建两个单独的索引,并接受这样一个事实,即搜索 (a) & (b) 可能不会尽可能快(因为它需要查找两个单独的索引)之一)?
将来可能还会有 (c),所以我需要搜索 (a)、(b)、(c) 或它们之间的任意组合。
有谁曾经遇到过这个问题并且知道合理的解决方案吗?
编辑:
额外要求的信息:
table_b 将比 table_a 大很多,可能大 10-20 倍。
行的查询百分比预计约为:
(一): 40%
(b): 40%
(a) & (b): 20%
您应该创建两个索引,一个是 (a, b)
上的复合索引,另一个仅在 (b)
或 b
和更多列上创建。
如果您无论如何都要创建两个索引,那么您已经承担了这两个索引的费用。相对于维护索引的开销,从索引中删除列是一个小的节省。您还不如拥有最适合您的查询的索引。
我在涉及简单 n 对 m 关系的当前任务中遇到问题 table。
在我的 table 中,我有以下列:
(a): FK 到 table_a
(b): FK 到 table_b
通常的方法是在 (a) 和 (b) 上创建一个复合主键,让我能够有效地搜索:
(一)
(a) & (b)
但我还需要能够单独搜索 (b) 的效率。所以总的来说,这是我的搜索场景:
(一)
(b)
(a) & (b)
创建
会不会更好
1. (a) & (b) 上的复合 PK 和 (b) 上的另一个单一索引?
2. 或者在 (a) 和 (b) 上创建两个单独的索引,并接受这样一个事实,即搜索 (a) & (b) 可能不会尽可能快(因为它需要查找两个单独的索引)之一)?
将来可能还会有 (c),所以我需要搜索 (a)、(b)、(c) 或它们之间的任意组合。
有谁曾经遇到过这个问题并且知道合理的解决方案吗?
编辑:
额外要求的信息:
table_b 将比 table_a 大很多,可能大 10-20 倍。
行的查询百分比预计约为:
(一): 40%
(b): 40%
(a) & (b): 20%
您应该创建两个索引,一个是 (a, b)
上的复合索引,另一个仅在 (b)
或 b
和更多列上创建。
如果您无论如何都要创建两个索引,那么您已经承担了这两个索引的费用。相对于维护索引的开销,从索引中删除列是一个小的节省。您还不如拥有最适合您的查询的索引。