クラスタリングされていないインデックスはインサートを遅くしますか?
-
04-10-2019 - |
質問
私はSQL Server2005で働いています。ユーザーアクションを追跡するイベントログテーブルがあります。テーブルへの挿入物ができるだけ速いことを確認したいと思います。現在、テーブルにはインデックスがありません。単一の非クラスターインデックスを追加すると、インサートが遅くなりますか?それとも、インサートを遅くするのはクラスター化されたインデックスのみですか?または、クラスター化されたインデックスを追加するだけで、心配しないでください。
解決
クラスター化またはクラスター化されていないインデックスは、SQLがテーブルとインデックスの両方を維持する必要があるため、常にインサートを遅くします。この減速は「絶対的な」意味であり、あなたはそれに気付かないかもしれません。データを取得するために必要なインデックスを追加します。
他のヒント
はい、どのインデックスも、行うときに最新の状態を維持するのに少し時間がかかります INSERT, UPDATE, DELETE
オペレーション。インデックスが多いほど、話している時間が長くなります。
しかし、最終的には、あなたにとってより重要なことに依存します - 良いクエリパフォーマンス(必要に応じてインデックスを追加)または適切な挿入パフォーマンス(できるだけ少ないインデックスがあります)に依存します。
より頻繁にどの操作を実行しますか?
これは、MySQL(およびその他のデータベースエンジン)の各セカンダリインデックスが、通常、あるタイプのBツリーとして編成される別のストレージプールであるためです。
これらのストレージプールには、インデックス付き値とベーステーブルレコードへの何らかのタイプのポインターがあるインデックスレコードが含まれています。 MySQLの場合、このポインターはベーステーブルの主要な鍵です。
レコードを挿入または削除するたびに、これらのインデックスストレージ領域に新しいレコードが追加または削除されます。レコードを更新し、更新にインデックス付き列が含まれる場合、関連するインデックスストレージプールもレコードを更新する必要があります。