2

大きなテーブル (1,000 万件以上のレコード) があります。このテーブルは、アプリケーションでの検索に頻繁に使用されます。そのため、テーブルにインデックスを作成する必要がありました。ただし、レコードがテーブルに挿入または更新されると、パフォーマンスが低下します。これは、インデックスの再計算が原因である可能性が最も高いです。

これを改善する方法はありますか。

前もって感謝します

4

5 に答える 5

9

インデックスの FILL FACTOR を減らすことで、(インデックス内の) ページ分割の数を減らすことができます。既定では、フィル ファクターは 0 (100% と同じ) です。そのため、インデックスを再構築すると、ページが完全にいっぱいになります。これは、変更されていないテーブル (挿入/更新/削除) に最適です。ただし、データが変更されると、インデックスを変更する必要があります。Fill Factor を 0 にすると、ページが分割されることが保証されます。

フィル ファクターを変更することで、ページを常に分割する必要がないため、挿入と更新のパフォーマンスが向上するはずです。Fill Factor = 90 でインデックスを再構築することをお勧めします。これにより、ページの 10% が空のままになり、ページ分割が少なくなり、I/O が少なくなります。90 が使用するのに最適な値ではない可能性があるため、ここでは「試行錯誤」が必要になる場合があります。

フィル ファクターに別の値を使用すると、select クエリが若干遅くなる可能性がありますが、フィル ファクターが 90% の場合は、それほど気にならないでしょう。

于 2008-11-12T18:33:41.737 に答える
2

インデックスを確認する必要がありますが、おそらくそうです。

覚えておくべきことは、すべての列にインデックスを配置するだけではなく、通常はインデックスごとに 1 つの列だけを配置したくないということです。

最善の方法は、実際の検索をいくつか記録し、ユーザーが実際に検索しているものを追跡し、それらの特定の種類の検索を対象としたインデックスを作成できる場合です。

于 2008-11-12T18:16:31.660 に答える
2

選択できるソリューションは多数あります

a)テーブルを分割できます

b) オフピーク時間 (夜間など) にバッチで更新を実行することを検討してください。

c) エンジニアリングはトレードオフのバランスをとる行為であるため、どちらがより重要であるか (選択または更新/挿入/削除)、およびどの操作がより重要であるかを選択する必要があります。「挿入」の結果をリアルタイムで必要としないと仮定すると、それらの操作に Sql サーバー サービス ブローカーを使用して、「重要度の低い」操作を非同期的に実行できます。

http://msdn.microsoft.com/en-us/library/ms166043(SQL.90).aspx

ありがとう -RVZ

于 2008-11-12T18:23:39.557 に答える
0

ID 数値フィールドにないクラスター化インデックスがある場合、ページを並べ替えると速度が低下する可能性があります。この場合、これを非クラスター化インデックスにすることで速度を向上できるかどうかを確認します (インデックスなしよりも高速ですが、クラスター化インデックスよりも少し遅くなる傾向があるため、選択は遅くなる可能性がありますが、挿入は改善されます)。

私は、ユーザーが少し遅い挿入または遅い選択への更新を容認することをいとわないことを発見しました。これは一般的なルールですが、容認できないほど遅くなった場合 (またはさらにタイムアウトが発生した場合) は、誰もうまく対処できません。

于 2008-11-12T19:13:28.740 に答える
0

これは古典的なエンジニアリングのトレードオフです... シャベルを軽くすることも強くすることもできますが、両方を作ることはできません... (材料科学のブレークスルーまで.)

インデックスが増えると、DML のメンテナンスが増え、クエリが高速になります。

インデックスが少ないということは、DML のメンテナンスが少なくなることを意味し、クエリが遅くなることを意味します。

一部のインデックスが冗長であり、組み合わせることができる可能性があります。

Joel が書いたことに加えて、DML の SLA も定義する必要があります。遅くなっても大丈夫ですか?遅くなったことに気づきましたが、達成したクエリの改善と比べて本当に重要ですか... IOW、軽いシャベルを持っていても大丈夫ですか?

于 2008-11-12T18:18:26.697 に答える