我有这张桌子:
CREATE TABLE [dbo].[relatea] (
[mid] [varchar](16) NOT NULL,
[sid] [varchar](16) NOT NULL
)
它存储哈希匹配。把它作为一个堆有什么好处吗?它有大约 700 万行,并且值在任一列中都不是唯一的。我知道堆通常不适合任何大表。此表当前没有索引。
我正在考虑将表格更改为:
CREATE TABLE [dbo].[relatea] (
[mid] [varchar](16) NOT NULL,
[sid] [varchar](16) NOT NULL,
CONSTRAINT [pk_relatea] PRIMARY KEY CLUSTERED (
[mid] ASC,
[sid] ASC
)
)
表查询通常但不总是 on sid
,并且 和 的组合mid
应该sid
始终是唯一的。
与将表作为堆相比,创建这样的聚集索引是否更好?
我会在 sid 列上放置一个聚集索引(不是主键)。如果您有时也对中间列进行查找,则将索引添加到中间列,并将 sid 列作为包含索引。
如果您不想创建聚集索引,那么每个列上的两个非聚集索引,另一列作为包含列应该可以为您提供相同的基本读取性能。