首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >sql主键和索引

sql主键和索引
EN

Stack Overflow用户
提问于 2009-01-20 18:28:00
回答 6查看 110.6K关注 0票数 110

假设我在数据库中有一个ID行(int)被设置为主键。如果我经常查询ID,我还需要对它进行索引吗?或者它是主键意味着它已经被索引了吗?

我这样问的原因是因为在MS SQL Server中,我可以在此ID上创建索引,正如我所说的,它是我的主键。

编辑:一个额外的问题--额外索引主键会有什么坏处吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-01-20 18:51:54

您是对的,SQL Server允许您在同一字段上创建重复的索引,这是令人困惑的。但是,您可以创建另一个索引并不意味着PK索引不存在。

额外的索引没有好处,但唯一的坏处(非常小)是额外的文件大小和行创建开销。

票数 75
EN

Stack Overflow用户

发布于 2009-01-20 19:01:40

正如其他人已经说过的那样,主键是自动索引的。

只有在需要优化使用主键和其他一些特定列的查询时,才能在主键列上创建更多索引。通过在主键列上创建另一个索引并包含一些其他列,您可以实现所需的查询优化。

例如,您有一个包含许多列的表,但您只查询ID、Name和Address列。以ID作为主键,我们可以创建以下建立在ID上的索引,但包括Name和Address列。

代码语言:javascript
复制
CREATE NONCLUSTERED INDEX MyIndex
ON MyTable(ID)
INCLUDE (Name, Address)

因此,当您使用此查询时:

代码语言:javascript
复制
SELECT ID, Name, Address FROM MyTable WHERE ID > 1000

SQL Server将只使用您创建的索引为您提供结果,并且它不会从实际的表中读取任何内容。

票数 56
EN

Stack Overflow用户

发布于 2009-01-20 18:30:31

除非您指定了non clustered,否则PK将成为聚集索引

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

https://stackoverflow.com/questions/462477

复制
相关文章

相似问题

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