【问题标题】:SQL n to m table Composite Key and single indicesSQL n 到 m 表复合键和单个索引
【发布时间】:2018-04-01 17:44:03
【问题描述】:

我在当前任务中遇到了一个问题,涉及一个简单的 n 对 m 关系表。

在我的表格中,我有以下列:
(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 倍。
行的查询百分比预计约为:
(a):40%
(b):40%
(a) & (b): 20%

【问题讨论】:

  • 这取决于, table_a 与 table_b 有多大? (a)、(b)、(a)&(b) 上的搜索是否同样频繁?
  • 为问题添加了预期值。

标签: sql composite-primary-key indices


【解决方案1】:

您应该创建两个索引,一个在 (a, b) 上创建复合索引,另一个仅在 (b)b 以及更多列上创建。

如果您仍然要创建两个索引,则您已经承担了这两个索引的成本。相对于维护索引的开销,从索引中删除列是一个小的节省。您不妨拥有最适合您的查询的索引。

【讨论】:

    猜你喜欢
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    相关资源
    最近更新 更多