「SQL アンチパターン」を読んだ

良い評判をよく聞く本だったので読んでみた. 実際面白くてスルスルと読んでしまった.

SQLアンチパターン

SQLアンチパターン

ゴリゴリのパフォーマンスチューニングをする本ではなくて, テーブルとカラムの設計の話がメイン. スロークエリが生まれる原因とか N + 1 問題に代表されるパフォーマンス改善問題といった内容を期待している人は他の本を読んだほうが良いと思う.

全ての章で, このアンチパターンを用いるとこんな問題が発生しますよという具体的な例がいくつも提示されていたのが良かった. プログラマなら本能的にダメそうなニオイを最初から感じるだろうな, というくらいのレベルのアンチパターンもいくつも紹介されているけど, それらは実際にこのようにダメになるでしょうという根拠が示されてて説得力がある.

6 章と 8 章で出てきた「データへのメタデータの混入」「メタデータへのデータの混入」という表現がキャッチーで良いなと思った. どちらも人間が自前でデータ / メタデータを管理しようとしてしまって本来の SQL の機能を使えなくしてしまっていることが問題の要因だ, と喝破している良い言葉だと思う. 同時に従属テーブルや交差テーブルの優位性があらためてよくわかる.

13 章で出てきた NULL との比較は正直最初驚いた. しかし例えば NULL = 12345 が FALSE にならず NULL になるのは「不明な値が, ある値と等しいかどうかはわからない」からと説明されると, うーむなるほどその通りだとなって, その後に例示されている比較が全て自然な結果として受け入れられるようになり良い体験, 学びがあった.

同様に 14 章で GROUP BY に関するエラーの話が出てきて, ここも正直今までよくわかっていなかったのだけど, つまり出力される結果が全ての列で単一の値でなければならないこと (単一値の原則) を理解すれば良かったのだった.

しかし著者の Bill Karwin という人もこれだけの経験を抽象化してパターンに落とし込むのは並大抵の仕事ではない. 内容も濃く優れた書籍だと思う.