在我的解决方案中,我对我的表有多个查询。我们假设它是一个包含多列的表,但 a 和 b 列构成 PrimaryKey 。有时我会通过 a 值查询,有时候会通过 b 值查询。目前我有PRIMARY KEY CLUSTERED ([a] ASC, [b] ASC)
。
当我尝试按列 b 进行查询时,它非常慢,我不断从数据库中获取超时。
拥有两个集群主键会很棒...... 我该怎么办?在列 b 上创建新索引会使 b 查询更有效吗?
答案 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(在您的情况下)。