クラスタリングされていないインデックスはインサートを遅くしますか?

StackOverflow https://stackoverflow.com/questions/2900409

  •  04-10-2019
  •  | 
  •  

質問

私はSQL Server2005で働いています。ユーザーアクションを追跡するイベントログテーブルがあります。テーブルへの挿入物ができるだけ速いことを確認したいと思います。現在、テーブルにはインデックスがありません。単一の非クラスターインデックスを追加すると、インサートが遅くなりますか?それとも、インサートを遅くするのはクラスター化されたインデックスのみですか?または、クラスター化されたインデックスを追加するだけで、心配しないでください。

役に立ちましたか?

解決

クラスター化またはクラスター化されていないインデックスは、SQLがテーブルとインデックスの両方を維持する必要があるため、常にインサートを遅くします。この減速は「絶対的な」意味であり、あなたはそれに気付かないかもしれません。データを取得するために必要なインデックスを追加します。

他のヒント

はい、どのインデックスも、行うときに最新の状態を維持するのに少し時間がかかります INSERT, UPDATE, DELETE オペレーション。インデックスが多いほど、話している時間が長くなります。

しかし、最終的には、あなたにとってより重要なことに依存します - 良いクエリパフォーマンス(必要に応じてインデックスを追加)または適切な挿入パフォーマンス(できるだけ少ないインデックスがあります)に依存します。

より頻繁にどの操作を実行しますか?

これは、MySQL(およびその他のデータベースエンジン)の各セカンダリインデックスが、通常、あるタイプのBツリーとして編成される別のストレージプールであるためです。

これらのストレージプールには、インデックス付き値とベーステーブルレコードへの何らかのタイプのポインターがあるインデックスレコードが含まれています。 MySQLの場合、このポインターはベーステーブルの主要な鍵です。

レコードを挿入または削除するたびに、これらのインデックスストレージ領域に新しいレコードが追加または削除されます。レコードを更新し、更新にインデックス付き列が含まれる場合、関連するインデックスストレージプールもレコードを更新する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top