0

SQLExpress を使用してデータベースを設計しています。3つの列を持つテーブルがあります。表は以下のようになります。

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 に答える