実践「その他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)インデックスはソート済み
◆「ソート処理が省略できることがある」
使用したインデックスに並べ替え列が含まれていればソート処理がいらないが、使える機会は少ない気もする。
ここまで。あとは実践あるのみ。徐々に勘所がわかってくると信じる。