0

10,000,000 レコードを超えるテーブル (SQL 2000) があります。レコードは、1 週間あたり約 80,000 ~ 100,000 の割合で追加されます。週に一度、データからいくつかのレポートが生成されます。インデックスがほとんどないため (おそらく INSERT を高速化するため)、通常、レポートの実行はかなり遅くなります。1 つの新しいレポートでは、特定の「char(3)」列にインデックスを追加することで、実際にメリットが得られる可能性があります。

Enterprise Manager (インデックスの管理 -> 新規 -> 列の選択、OK) を使用してインデックスを追加し、テーブルのインデックスを再構築しましたが、SELECT クエリはまったく高速化されていません。何か案は?

更新

テーブル定義:

ID, int, PK
Source, char(3)  <--- column I want indexed
...
About 20 different varchar fields
...
CreatedDate, datetime
Status, tinyint
ExternalID, uniqueidentifier

私のテストクエリは次のとおりです。

select top 10000 [field list] where Source = 'abc'
4

4 に答える 4

5

クエリ プランを調べて、その新しいインデックスを使用しているかどうかを確認する必要があります。使用されていない場合は、いくつかのことがあります。1 つ - 新しいインデックスが作成されてから無効化されていない、キャッシュされたクエリ プランが使用されている可能性があります。そうでない場合は、インデックス ヒント [ With (Index (yourindexname)) ] を試すこともできます。

10,000,000 行は前代未聞ではなく、かなり高速に読み取られるはずです。

于 2008-12-11T21:55:42.230 に答える
1

インデックスが使用されているかどうかを確認するには、SQL クエリ アナライザの [Show Execution Plan] を使用します。

まだクラスター化されていない場合は、クラスター化インデックスにすることもできます。

于 2008-12-11T21:44:15.407 に答える
0

そのサイズのテーブルの場合、最善の策はおそらくテーブルとインデックスを分割することです。

于 2008-12-11T21:10:38.063 に答える
0
 select top 10000 

あなたの情報源はどれくらいユニークですか? 値がほとんどないフィールドのインデックスは、通常、SQL エンジンによって無視されます。クエリが遅くなります。そのインデックスを削除して、SOURCE フィールドに少数の値しかない場合の方が高速かどうかを確認することをお勧めします。

于 2008-12-11T23:19:38.567 に答える