SQL:主键中的多个列 - 如何实现正确的顺序?

时间:2017-08-30 11:59:51

标签: sql performance database-design database-performance

在我的解决方案中,我对我的表有多个查询。我们假设它是一个包含多列的表,但 a b 列构成 PrimaryKey 。有时我会通过 a 值查询,有时候会通过 b 值查询。目前我有PRIMARY KEY CLUSTERED ([a] ASC, [b] ASC)。 当我尝试按列 b 进行查询时,它非常慢,我不断从数据库中获取超时。

拥有两个集群主键会很棒...... 我该怎么办?在列 b 上创建新索引会使 b 查询更有效吗?

1 个答案:

答案 0 :(得分:0)

主键是逻辑概念。另一方面,性能取决于物理数据组织。 WHERE a = ?速度快的原因不是PK存在,而是与PK一起自动创建索引。

因此,如果您想快速进行另一个查询,只需添加适当的索引。

假设你的表看起来与此类似......

CREATE TABLE T (
    a int,
    b int,
    c int,
    PRIMARY KEY (a, b)
);

您还有以下用于创建索引以加速WHERE b = ?的选项:

CREATE INDEX T_I1 ON T(b);
CREATE UNIQUE INDEX T_I2 ON T(b, a);
CREATE UNIQUE INDEX T_I3 ON T(b, a, c);
   -- or: CREATE UNIQUE INDEX T_I2 ON T(b, a) INCLUDE (c);

您选择的其中一个选项在很大程度上取决于您想要cover的查询量。

另外,要注意......

CREATE INDEX T_I1 ON T(b);

......实际上可能等同于......

CREATE INDEX T_I1 ON T(b) INCLUDE (a);

...如果您的表格为clustered(在您的情况下)。