[SQLチューニング]お勉強⑨~ここに注意「その他SQL要素編」~

実践「その他SQL要素編」
[SQLチューニング]シリーズいったん最後。

GROUP BY句やORDER BY句の使用時に気を付けること。

1.GROUP BY句

(1)GROUP BYの対象列がインデックスだと効果的

◆「MAX、MINだとインデックスからすぐ抽出できる」

例えば、グループ化列とMAX指定列が複合インデックスのキー列だったら、インデックスだけで完結する。
インデックスを使うためにNOT NULL制約を付けておくか、IS NOT NULL条件でNULLを排除しておくのはいつものお約束。

(2)HAVINGは重い

◆「グループ化前のWHERE句に置き換えられないか考える」

集計結果をHAVINGしたい場合が多いとは思うけど。

2.ORDERE BY句

(1)ソート処理は重い

◆「ORDER BY句書いてないのにソートがかかることがある」

処理の都合上でソートが必要になっているパターン。
以下がその例だが、本当に必要かよく考える。

  • DISTINCT句の利用
  • GROUP BY句の利用
  • 集合演算子(UNION句、MINUS句etc.)の利用
  • ソート/マージ結合の利用

(2)インデックスはソート済み

◆「ソート処理が省略できることがある」

使用したインデックスに並べ替え列が含まれていればソート処理がいらないが、使える機会は少ない気もする。

 

ここまで。あとは実践あるのみ。徐々に勘所がわかってくると信じる。