『SQL実践入門』
https://gyazo.com/da5bca2dcdf7d87c407275210a2d4c12
初心者向け
第1章 DBMSのアーキテクチャ
第2章 SQLの基礎
第3章 SQLにおける条件分岐──文から式へ
3.3 それでもUNIONが必要なのです
UNIONを使わなければ解けないケース
UNIONを使ったほうがパフォーマンスが良いケース
UNIONによる解
ORを使った解
INを使った解
3.4 手続き型と宣言型
文ベースと式ベース
宣言型の世界へ跳躍しよう
第3章のまとめ
演習問題3
第4章 集約とカット──集合の世界
複数行を1行にまとめる
CASE式とGROUP BYの応用
集約・ハッシュ・ソート
合わせ技1本
4.2 カット
あなたは肥り過ぎ? 痩せ過ぎ? ──カットとパーティション
パーティション
BMIによるカット
PARTITION BY句を使ったカット
第4章のまとめ
演習問題4
第5章 ループ──手続き型の呪縛
p.141でサラッと触れられている
ループ回数の上限が決まっている場合
複雑な割に汎用性が低そうだったのでサラッと読んだ、いつか再読mrsekut.icon
近似する郵便番号を求める
ランキングの問題に読み替え可能
ウィンドウ関数でスキャン回数を減らす
ループ回数が不定の場合
SQLの階層構造の表現方法
再帰共通表式
隣接リストモデルと再帰クエリ
入れ子集合モデル
5.4 バイアスの功罪
第5章のまとめ
演習問題5
第6章 結合──結合を制する者はSQLを制す
内部結合、外部結合の説明の仕方がスッキリしていて良いmrsekut.icon
下手なqiitaとか読むよりよっぽど良い
Nested Loops
Nested Loopsの動作
駆動表の重要性
Nested Loopsの落とし穴
Hash
Hashの動作
Hashの特徴
Hashが有効なケース
Sort Merge
Sort Mergeの動作
Sort Mergeの特徴
Sort Mergeが有効なケース
意図せぬクロス結合
Nested Loopsが選択される場合
クロス結合が選択される場合
意図せぬクロス結合を回避するには
6.3 結合が遅いなと感じたら
ケース別の最適な結合アルゴリズム
そもそも実行計画の制御は可能なのか?
DBMSごとの実行計画制御の状況
実行計画をユーザが制御することによるリスク
揺れるよ揺れる,実行計画は揺れるよ
第6章のまとめ
演習問題6
subqueryはパフォーマンスが悪い。WINDOW関数を使え
集約してから結合するか、結合してから集約するかでパフォーマンスが変わる
もちろん前者のほうが速いmrsekut.icon
特にメモってないので再読しよう
7.2 サブクエリの積極的意味
結合と集約の順序
2つの解
結合の対象行数
第7章のまとめ
演習問題7
第8章 SQLにおける順序──甦る手続き型
8.1 行に対するナンバリング
主キーが1列の場合
ウィンドウ関数を利用する
相関サブクエリを利用する
主キーが複数列から構成される場合
ウィンドウ関数を利用する
相関サブクエリを利用する
グループごとに連番を振る場合
ウィンドウ関数を利用する
ナンバリングによる更新
相関サブクエリを利用する
8.2 行に対するナンバリングの応用
中央値を求める
集合指向的な解
手続き型の解(1)──世界の中心を目指せ
手続き型の解(2)──2マイナス1は1
ナンバリングによりテーブルを分割する
断絶区間を求める
集合指向的な解──集合の境界線
手続き型の解──「1行あと」との比較
テーブルに存在するシーケンスを求める
集合指向的な解──再び,集合の境界線
手続き型の解──再び,「1行あと」との比較
8.3 シーケンスオブジェクト・IDENTITY列・採番テーブル
シーケンスオブジェクトの問題点
シーケンスオブジェクトそのものに起因する性能問題
シーケンスオブジェクトそのものに起因する性能問題への対策
連番をキーに使うことに起因する性能問題
連番をキーに使うことに起因する性能問題への対策
第8章のまとめ
演習問題8
第9章 更新とデータモデル──盲目のスーパーソルジャー
9.1 更新は効率的に
NULLの埋め立てを行う
逆にNULLを作成する
9.2 行から列への更新
1列ずつ更新する
行式で複数列更新する
UPDATE文を利用する
9.3 列から行への更新
9.4 同じテーブルの異なる行からの更新
相関サブクエリを利用する
ウィンドウ関数を利用する
9.5 更新のもたらすトレードオフ
SQLで解く方法
SQLに頼らずに解く方法
9.6 モデル変更の注意点
更新コストが高まる
更新までのタイムラグが発生する
モデル変更のコストが発生する
9.7 スーパーソルジャー病:類題
再び,SQLで解くなら
再び,モデル変更で解くなら
初級者よりも中級者がご用心
9.8 データモデルを制す者はシステムを制す
第9章のまとめ
演習問題9
第10章 インデックスを使いこなす
Appendix A:PostgreSQLのインストールと起動
Appendix B:演習問題の解答