1

制御不能に成長しているテーブルを持つデータベースを引き継いでいます。2011年、2012年、2013年、そして将来の取引実績があります。

テーブルは会社の運営にとって重要です。しかし、730,000 件のレコードで制御不能になり、トランザクションが隔週で追加されて成長しています。

多くの既存の操作がテーブルに依存しているため、テーブルの既存の構造を変更したくありません。これまでのところ、トランザクション ID とトランザクション日付のインデックスがあります。しかし、テーブルをクエリするのは非常に面倒です。

インデックスの一部として left(date,4) を使用して、トランザクション日付の年だけにインデックスを付けることが賢明でしょうか?

EDIT:テーブルは正規化されていません(各行はクレーム番号に固有であるため、正規化する目的はわかりません)。各レコードには168個のフィールドがあり、varchar(255)の5つの異なる「メモ」フィールドがあります。

4

1 に答える 1

0

オプションの 1 つはフィルター処理されたインデックスを作成することです。これは、特定の基準に応じてレコードのグループを結合するようなものです。

あなたの場合、いくつかのインデックスを作成する必要があります-それぞれが特定の年のレコードをフィルタリングします。例えば:

CREATE NONCLUSTERED INDEX IndexFor2013Year
    ON MyTable.BillOfMaterials (SomeDate)
    WHERE SomeDate>"2013-01-01 00:00:00" and SomeDate<"2014-01-01 00:00:00";
GO

とにかく、DML 操作 (UPDATE/INSERT/DELETE) が頻繁に行われるテーブルに多くのインデックスを作成すると、パフォーマンスが低下する可能性さえあります。

いくつかのテストを実行し、実行計画を比較する必要があります。

そして、私は単なる例を示していることに注意してください.クエリが正確に何であるかに応じて、インデックスを作成する必要があります. 時々、SQL Management Studio (2012) から提案されたクエリの実行計画を見て、どのインデックスが正確にパフォーマンスを向上させることができるかを調べます。

于 2013-02-19T19:44:21.333 に答える