首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL:主键中的多列--如何实现正确的顺序?

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

Stack Overflow用户
提问于 2017-08-30 11:59:51
回答 1查看 2K关注 0票数 1

在我的解决方案中,我对我的表有多个查询。让我们假设它是一个具有多列的表,但是列ab形成了PrimaryKey。有时我通过a值查询,有时通过b值查询。目前我有PRIMARY KEY CLUSTERED ([a] ASC, [b] ASC)。当我试图通过列b查询时,它非常慢,而且我经常从数据库中得到超时。

有两个聚集的主键就好了.我该怎么做?在列b上创建一个新的索引会提高b查询的效率吗?

EN

回答 1

Stack Overflow用户

发布于 2017-08-30 12:24:39

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

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

假设你的桌子看起来像这个..。

代码语言:javascript
运行
复制
CREATE TABLE T (
    a int,
    b int,
    c int,
    PRIMARY KEY (a, b)
);

对于创建加速WHERE b = ?的索引,您有以下更少的选项

代码语言:javascript
运行
复制
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);

这些选项中的哪一个在很大程度上取决于您想要封面的查询的多少。

还有要小心..。

代码语言:javascript
运行
复制
CREATE INDEX T_I1 ON T(b);

...might实际上相当于..。

代码语言:javascript
运行
复制
CREATE INDEX T_I1 ON T(b) INCLUDE (a);

...if您的表是聚类 (在您的情况下就是这样)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45959867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档