假设我在数据库中有一个ID行(int)被设置为主键。如果我经常查询ID,我还需要对它进行索引吗?或者它是主键意味着它已经被索引了吗?
我这样问的原因是因为在MS SQL Server中,我可以在此ID上创建索引,正如我所说的,它是我的主键。
编辑:一个额外的问题--额外索引主键会有什么坏处吗?
发布于 2009-01-20 18:51:54
您是对的,SQL Server允许您在同一字段上创建重复的索引,这是令人困惑的。但是,您可以创建另一个索引并不意味着PK索引不存在。
额外的索引没有好处,但唯一的坏处(非常小)是额外的文件大小和行创建开销。
发布于 2009-01-20 19:01:40
正如其他人已经说过的那样,主键是自动索引的。
只有在需要优化使用主键和其他一些特定列的查询时,才能在主键列上创建更多索引。通过在主键列上创建另一个索引并包含一些其他列,您可以实现所需的查询优化。
例如,您有一个包含许多列的表,但您只查询ID、Name和Address列。以ID作为主键,我们可以创建以下建立在ID上的索引,但包括Name和Address列。
CREATE NONCLUSTERED INDEX MyIndex
ON MyTable(ID)
INCLUDE (Name, Address)
因此,当您使用此查询时:
SELECT ID, Name, Address FROM MyTable WHERE ID > 1000
SQL Server将只使用您创建的索引为您提供结果,并且它不会从实际的表中读取任何内容。
发布于 2009-01-20 18:30:31
除非您指定了non clustered,否则PK将成为聚集索引
https://stackoverflow.com/questions/462477
复制相似问题