我有一个这样定义的表
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 上几乎没有其他 NONCLUSTERED 索引
我认为在上面创建 CLUSTERED 索引更有意义,但我想知道不创建 CLUSTERED 索引而是创建 NONCLUSTERED 有什么好的理由吗?
PS 有很多关于这些主题的问题,但找不到相关的问题(在前 20 名列表中)。如果有人问过这个问题,请将我重定向到相关的问题帖子。
编辑:考虑一个MyTable
映射其他两个表的情况SomeTable2
,SomeTable3
而不是有复合键,我们有这个MyTableId
所以大多数时候我的查询有一个SomeTable2Id
orSomeTable3Id
和请求获取其他 id。因此,鉴于此表的使用情况,我们真的需要在上面创建一个聚集索引MyTableId
还是两个非聚集索引SomeTable2Id
就SomeTable3Id
足够了?