Skip to content

SQL実践入門 読んだ

Published: at 10:19

メモです.

3章 式の条件分岐

4章 集約とカット

GROUP BY には「集約」と「カット」の機能がある.「カット」とはパーティションをつくること.ウィンドウ関数の PARTITION BY はカットのための機能.

5章 手続きSQL

SQL実行のオーバーヘッド:

  1. SQL文のネットワーク伝送
  2. データベースへの接続
  3. SQL文のパース
  4. SQL文の実行計画生成および評価
  5. 結果セットのネットワーク伝送

1と5は,同一ネットワーク上であればほぼ無視できる.2はコネクションプールで対応できる.このうち,3と4が支配的である. ある処理を達成するために,逐次的な「軽いSQL」によるロジックと,一度の「重いSQL」によるロジックがある.

軽いSQLによる問題:

一方で軽いSQLの利点:

一撃でループ処理をするSQLの書き方:

6章 結合

結合は3種類:

オプティマイザが選択可能な結合アルゴリズムは3種類.ただし,MySQL は Nested Loops しか使えない.結合は実行計画が変動しやすいため,そもそも結合を回避することが1つの戦略である.

Nested Loops

二重ループによる結合.外側のループに対応するものを driving table (駆動表) または outer table (外部表) と呼び,もう一方を inner table (内部表) と呼ぶ.

Hash

まず小さいテーブルの結合キーのハッシュテーブルをつくる.次に,大きなテーブルに対して結合キーのハッシュ値とハッシュテーブルのマッチングを行う.

Sort Merge

二つのテーブルを結合キーでソートし,マッチングを行う.

A INNER JOIN B INNER JOIN C のような「三角結合」の場合,オプティマイザによっては意図しないBとCのクロス結合が行われる場合がある.明示的に冗長なBとCの結合条件を加えることで,これを回避できる.

7章 サブクエリ

8, 9, 10章

必要になったらまた読む