在我的解决方案中,我对我的表有多个查询。让我们假设它是一个具有多列的表,但是列a和b形成了PrimaryKey。有时我通过a值查询,有时通过b值查询。目前我有PRIMARY KEY CLUSTERED ([a] ASC, [b] ASC)。当我试图通过列b查询时,它非常慢,而且我经常从数据库中得到超时。
有两个聚集的主键就好了.我该怎么做?在列b上创建一个新的索引会提高b查询的效率吗?
发布于 2017-08-30 12:24:39
主键是一个逻辑概念。另一方面,性能取决于数据的物理组织。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);这些选项中的哪一个在很大程度上取决于您想要封面的查询的多少。
还有要小心..。
CREATE INDEX T_I1 ON T(b);...might实际上相当于..。
CREATE INDEX T_I1 ON T(b) INCLUDE (a);...if您的表是聚类 (在您的情况下就是这样)。
https://stackoverflow.com/questions/45959867
复制相似问题