🍭

転ばぬ先のSQL

2024/09/21に公開

ソートは日常茶飯事である

以下に挙げるのはソートが発生する演算である。
代替、代用が可能であればこれを実施するべき。

  • 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