使用没有聚集索引的哈希表是否有任何性能优势?

bum*_*una 6 index sql-server-2008 database-design sql-server heap

我有这张桌子:

CREATE TABLE [dbo].[relatea] (
   [mid] [varchar](16) NOT NULL,
   [sid] [varchar](16) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

它存储哈希匹配。将其作为堆有什么好处吗?它有大约 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
   )
)
Run Code Online (Sandbox Code Playgroud)

表的查询一般但不总是在sid和组合mid,并sid应始终是唯一的。

与将表保留为堆相比,创建这样的聚集索引是否更好?

mrd*_*nny 8

我会在 sid 列上放置一个聚集索引(不是主键)。如果您有时也对中列进行查找,则将索引添加到中列,将 sid 列作为包含的索引。

如果您不想创建聚集索引,那么每个列上的两个非聚集索引与另一列作为包含列应该可以提供相同的基本读取性能。