web-dev-qa-db-ja.com

SQLServer-nvarcharフィールドのインデックス

nvarcharフィールドを一意に保つための良いアプローチは何ですか。 MP3ファイルのURLを保存しているフィールドがあります。 URLの長さは10文字から4000文字までです。インデックスを作成しようとしましたが、全長が900バイトを超えるため、インデックスを作成できないと表示されます。

フィールドにインデックスが付けられていない場合、何かを検索するのに時間がかかります。フロントエンドにC#、ASP.netMVCを使用しています。

13
Parminder

CHECKSUMコマンドを使用して、チェックサムを使用して列にインデックスを付けることができます。

--*** Add extra column to your table that will hold checksum
ALTER TABLE Production.Product
ADD cs_Pname AS CHECKSUM(Name);
GO

--*** Create index on new column
CREATE INDEX Pname_index ON Production.Product (cs_Pname);
GO

次に、次のクエリを使用してデータをすばやく取得できます。

SELECT * 
FROM Production.Product
WHERE CHECKSUM(N'Bearing Ball') = cs_Pname
AND Name = N'Bearing Ball';

ドキュメントは次のとおりです。 http://technet.Microsoft.com/en-us/library/ms189788.aspx

27
Kaspars Ozols

ハッシュ関数を使用して(理論的には、2つの異なるタイトルが異なるハッシュを持つことを保証するものではありませんが、十分に良いはずです: MD5 Collisions )、その列にインデックスを適用します。

SQL ServerのMD5

4
Joao Leal

URLのハッシュコードを作成し、この整数をデータベースの一意のインデックスとして使用できます。すべてのURLが同じ形式になるように、最初にすべての文字を小文字に変換することに注意してください。同じURLは等しいハッシュコードを生成します。

1
Oscar