添加索引后更新表

时间:2012-07-12 00:27:52

标签: database indexing sql-server-express ssms

我正在使用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中执行此操作。此外,添加此索引后,如何索引此表中的现有行?

1 个答案:

答案 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