🍭
転ばぬ先のSQL
ソートは日常茶飯事である
以下に挙げるのはソートが発生する演算である。
代替、代用が可能であればこれを実施するべき。
- GROUP BY句
- ORDER BY句
- DISTINCT
- 集合演算子(UNION, INTERSECT, EXCEPT)
- 集約関数(SUM, COUNT, AVG, MAX, MIN)
- ウィンドウ関数(RANK, ROW_NUMBER等)
ソートがストレージを使用し始めると、パフォーマンスは大きく低下する。
GROUP BY, ORDER BYにはインデックス
通常、並べ替えのためのソートが発生する。
インデックスを貼ったカラムをキーに指定することでソートのための検索を高速化できる。
ユニークインデックスの場合にはソート自体をスキップする実装もある。
DISTINCTにはEXISTSを。
集合演算子にはALLを。
集合演算子は、重複削除のためのソートを行う。
MAX, MINにはインデックス
インデックスを使用する場合は、スキャンのみを行い検索を回避できる。
複合キーの場合でも、先頭キーであれば使用できる。
Discussion