4

これは、BFPRODATTRASSOCIATION (value,attributeid) include (productid) で index create index idx_ncl_2 を作成するためのクエリです。

BFPRODATTRASSOCIATION のテーブル構造

ProdAttrAssociationId bigint no 8
ProductId             bigint no 8
AttributeId           bigint  no  8
Value                 varchar no 4096

このエラーが発生しています:

キーの最大長は 900 バイトです。インデックス「idx_ncl_2」の最大長は 1237 バイトです。

この列に非クラスター化インデックスを作成する必要があります。データ型が varchar で、サイズが 900 より大きい列のインデックスを作成する方法はありますか。

提案してください。

4

2 に答える 2

12

エラーメッセージにすでに明確に示されているように、インデックスエントリの長さは900バイトを超えることはできません。

varchar(4096)フィールド-期間にインデックスを付けることはできません。それを回避する方法はありません-それはSQLServerの厳しい制限です-それを構成したり、変更したり、大きくしたりする方法はありません。確認については、BooksOnline-インデックスキーの最大サイズを参照してください。

「値」列を900バイト未満に制限するか、そのデータを格納する別の方法を見つけるか、インデックスに含めないようにする必要があります。インデックスの「値」フィールドにカバーインデックスのみを含める場合(インデックスエントリからのクエリを満たすことができるようにするため)、フィールドをインデックスに含まれる列に移動できます。これらは該当しません。 900バイトの制限。

CREATE NONCLUSTERED INDEX idx_ncl_2 
  ON BFPRODATTRASSOCIATION(attributeid) 
  INCLUDE (productid, value)

そのインデックスは機能するはずです。

于 2010-06-04T11:17:06.370 に答える
4

文字列のハッシュである計算列を作成してインデックスを作成できます。いくつかのアイデアと制限事項については、「 T-SQL のハッシュ関数」および「ハッシュ キーを使用したインテリジェント データベース設計」を参照してください。

于 2010-06-04T12:05:39.560 に答える