web-dev-qa-db-ja.com

group by句で使用される列にインデックスを追加するのは良いですか?

次のようなクエリがあります

select x, sum(y) from xyz where z>=100 group by x order by sum(y) desc;

xにインデックスを追加する場合、それはより速くなりますか?

5
Aamir

Xにインデックスを追加すると、ここでパフォーマンスが少し向上します。理想的には、Xの後にZの複合キーが必要です。Zが100マークを超えるすべてのXについて分析を行い、インデックスが真になるようにします。両方が必要です。

ただし、その時点で特定のクエリのインデックスを構築しているため、1つのクエリに対して挿入、更新、削除、再インデックス、ストレージスペースの追加処理がすべて実行されます(何かが繰り返し使用される場合)。そして他の場所ではそれはそうかもしれません、それはあなたがすでに持っているさまざまなクエリでも役立つかもしれません)

テーブル構造とコンテンツの残りの部分に応じて、クラスター化されたキーをX、Zとして持つことができ、それでうまくいきます。列a、b、c、d、e、f、gがある場合、aはクラスター化されているIDフィールドであり、これはセカンダリインデックスとして役立ちます。

しかし結局のところ、インデックスが役立つかどうかを知る唯一の方法は、それをテストすることです。世界最高の意志では、特定のすべてのインデックスがシステム全体で役立つことを保証することはできません。テストのみがそれを行うことができます。

1
Ste Bov

私はそれが与えるとは思わない。 「x」が計算可能な項目である場合、それをどのように処理するかによって、ここではインデックスが機能しないことがあります。条件パーツ列に使用可能なインデックスがある場合、選択範囲が広がります。

0
Hakuna Matata