0

我正在使用 SQLExpress 设计一个数据库。我有一个包含三列的表。该表如下所示。

CREATE TABLE [dbo].[dummy](
[id] [int] IDENTITY(1,1) NOT NULL,
[someLongString] [text] NOT NULL,
[someLongText_Hash] [binary](20) NOT NULL,
 CONSTRAINT [PK_dummy] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

我已经在这张表中有一些数据。每当我想添加一个新行时,我首先计算一个散列someLongString并查询表以查看具有此散列的行是否已经存在。随着表大小的增长,此查询会花费更长的时间,因此我计划按someLongText_Hash列对其进行索引。

有人可以建议如何在 SQL Server Management Studio 中执行此操作。另外,添加此索引后,如何索引此表中的现有行?

4

1 回答 1

1

为什么不能将“someLongString”字段设置为唯一的?这样你就不需要保留哈希和额外的主键了吗?

您可以尝试使用 CHECKSUM。

CREATE TABLE [dbo].[dummy](
[id] [int] IDENTITY(1,1) NOT NULL,
[someLongString] [text] NOT NULL,
[someLongText_CheckSum] NOT NULL,
CONSTRAINT [UC_someLongText_CheckSum] UNIQUE (someLongText_CheckSum),
 CONSTRAINT [PK_dummy] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

请参阅此处以获取更多说明

于 2012-07-12T00:39:16.933 回答