インデックスを作成するタイミングは?


1

私は実行に約2分かかるストアドプロシージャを持っています。実行計画では、テーブルにクラスタ化されていないインデックスを作成するように指示しました(これは、数百万のレコードを持つ高トラフィックテーブルであり、1秒ごとに一定のデータストリームを取得します)。

私はそのテーブルにインデックスを作成するかどうかを決定する際に助けてください。

注:私は(開発サーバー上)、そのテーブルに非クラスタ化インデックスを作成しようとした時間は2分40秒に減少しました。お使いのノートに基づいて

+5

どのRDBMSとバージョン? 23 1月. 132013-01-23 01:43:29

  0

MS-SQL Server 2008 23 1月. 132013-01-23 15:20:39

2

そのテーブルに非クラスタ化インデックスを追加すると、行くための正しい方法であるように聞こえます。開発システムの列の順序で再生し、必要な列を含まれた列として追加して、クエリがより高速になるかどうかを確認します。

親指の一般的なルールは、それがクエリがアプリケーションの一部であり、クエリは、クエリのインデックスを有するコスト価値があるだろう定期的に、その後使用されているです。

  0

@medenny:あなたはそれに支払う必要があるコストについて何らかの光を当てることができますか? 22 1月. 132013-01-22 23:09:32

+1

私がここで言うコストは、インデックス内のデータを維持するためのIOの作業負荷です。 23 1月. 132013-01-23 00:00:53


7

あなたは本当にそれが変更または何列新しいNCIに入れどのようなオリジナルの実行計画に関する十分な情報を与えられていません。クエリのパフォーマンスをさらに向上させることが可能です。新しいインデックスのコストは、初期ビルド、INSERTとUPDATEのエントリの追加処理、そしておそらくフラグメンテーションメンテナンスです。また、データ・プロファイルが変更される可能性がある場合は、統計の保守が必要になる可能性があります。

インデックスがクラスタ化インデックスへの読み取りアクセスを減らすことによって、システム全体のパフォーマンスを向上させることができますが、急速に変化するテーブルと、インデックスを維持するためのコストが非常に高くなる可能性があり。一方、全体的な要件を検討する必要があります。このクエリが月に一度しか実行されない場合は、おそらくそれが負担するには高すぎます。それが1時間に10回実行されている場合、挿入をわずかに遅くして数秒で実行すると、支払う小さな値段になる可能性があります。 NCIキーは静的ではないため、更新が多い場合のために外を見るために

事は、インデックスの断片化になります。

  0

クエリはオンデマンドレポートクエリであり、クライアントは1日に4〜5回それを使用します。 22 1月. 132013-01-22 23:29:28

  0

@MihirこれがSQL Serverであることを前提にしていますが、プロファイラを使用して典型的なワークロードを取得し、それをデータベースエンジンチューニングアドバイザーにフィードして、どのようなものが見えるかを確認できます。あなたはいくつかのインデックスを取り除くことができるかもしれません。一般的に、インデクスは、INSERTとUPDATEのスペースオーバーヘッドと処理/ IOオーバーヘッドであり、読み込み時にパフォーマンスペイオフを行います。 23 1月. 132013-01-23 03:47:36


2

前述のとおり:はい:ノンクラスタード・インデックスを追加します。

何バイトの幅ですか?

書き込み操作に悪影響を及ぼすかどうかを評価したいと考えます。多くの要因があるため、距離から評価するのは簡単ではありません。現在の書き込みパフォーマンスの感覚を持ち、新しいインデックスを追加して、書き込みパフォーマンスまたは全体的なパフォーマンスが悪影響を受けるかどうかを確認するのが最も難解な方法です。

この種のdbチューニングは、スタック交換でここでは簡単ではありません。それは関与することができ、しばしばコストと利益のトレードオフです。