我已经被这样的主键BIGINT和身份,超过聚集索引更喜欢非聚集索引任何理由
CREATE TABLE [dbo].[MyTable](
[MyTableId] [bigint] IDENTITY(1,1) NOT NULL,
[SomeTable2Id] [bigint] NOT NULL,
[SomeTable3Id] [bigint] NOT NULL,
[SomeData] [smallint] NOT NULL,
CONSTRAINT [PK_MyTable] PRIMARY KEY NONCLUSTERED
(
[MyTableId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
从上面PK_MyTable非聚集索引
除了定义的表,我有一些其他的NONCLUSTERED索引通过SomeTable2Id和SomeTable3Id
我认为上面创建CLUSTERED索引更有意义,但我想知道有没有很好的理由不创建一个CLUSTERED索引,而是创建NONCLUSTERED?
PS对这些主题提出了很多问题,但找不到相关的问题(前20名)。如果有问题,请将我重定向到相关的问题。
编辑:考虑这样MyTable
被映射其他两个表SomeTable2
和SomeTable3
和而不是有复合键的情况下,我们有这个MyTableId
所以大部分时间我的查询要么SomeTable2Id
或SomeTable3Id
,并要求得到其他ID。因此,根据这张表格的使用情况,我们是否真的需要在MyTableId
之上创建聚集索引,或者是否有两个非聚集索引SomeTable2Id
和SomeTable3Id
就足够了?
谢谢。我有一个问题。在我的情况下,这个表充当两张不同表之间的映射表。我将使用这张表进行查找。大多数时候,我不会使用它的主键。这是否有所作为? – Ankush
@Ankush主键总是有一个索引(不管它是否是表的聚集索引的选择)。如果您要通过其他方法访问,请考虑对这些键(群集或非群集)编制索引。聚类指数的选择应该是独特的,狭窄的,静态的,并且越来越多。如果你有几个候选人,我会选择最有可能用于范围查询的人,如果不是,可能是一个身份(如你的情况)。 –
我明白,但这并没有解决我在上述评论中的担忧。我想你的意思是**不会**有所作为,并与主键上的聚集索引。对? – Ankush