我正在使用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中执行此操作。此外,添加此索引后,如何索引此表中的现有行?
答案 0 :(得分: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
有关详细说明,请参阅here