「失敗から学ぶ RDB の正しい歩き方」を読んだ

出張中に唯一通しで読めたもの。

最近また SQL heavy なプロジェクトになったし SQL アンチパターンの記憶も薄れてきていたので、とても興味深く読めた。面白かった。

2 章 失われた事実

例になっているのが消費増税の話でタイムリーな話題。状態を更新してしまうのではなく、履歴を残そうというのは、これまでの失敗の教訓としてもあるんだけど、ついサボってしまいがち。。

アンチパターンのポイントに書かれている、「払い戻し」「ステータス変化の追跡」「トラブル対応時」なんかは、業務と設計を考える上でのインプットとして良さそうに感じた。

3 章 やり過ぎた JOIN

JOIN のアルゴリズムについて、いくつか分かりやすく説明されていて良かった。自分では、分かっているようで、人に簡潔に説明できない部分。。

この部分で View やマテリアライズド・ビューにも言及されていて、自分ではあまり使った経験が無かったが、テクニックとして覚えておきたい。

4 章 効かない INDEX

BTree に関しては、並行して「データ指向アプリケーションデザイン」を読んでいたので、そちらにも細かい話が入っていて、合わせて読むとより面白いという感じで良かった。

INDEX が使われないケースに関しても、なんとなく経験的には分かっていても、こうやって列挙しろと言われるとできないのでありがたい。

最後のインデックスショットガンの話は、まさに今似たような状況に直面している DB があって、うーーーんと唸っている。

5 章 フラグの闇

闇だ。

削除フラグでなくともステータスのようなものはつい使ってしまいがち。データ量の増加の見積もりと相談しつつ、考えていきたい。。

6 章 ソートの依存

2 つ前の現場で ORDER BY 句狙いの INDEX を初めてインフラチームの人に勧められて使い、その時に初めて存在を認識した記憶がある。

LIMIT/OFFSET や GROUP BY + ORDER BY の組み合わせの問題など、これまで痛い目を見た感じ(かつ、また痛い目みそうな)のが挙げられていて納得しかなかった。

9 章 強すぎる制約

これまで、MySQLPostgreSQL を使っていて、ほとんど外部キー制約は避けてきたのだけど、なんとなく「どうしてだっけかな」と思い出したり忘れたりしていたけど、言語化されていて勉強になった。

13 章 知らないロック

MySQL でおなじみだった、ギャップロックとネクスキーロックSQL Server でも固有のものってあるんだろうかなぁ。

16 章 キャッシュ中毒

個人的にツボな名前なのだけど、キャッシュは用法用量を守ってお使いくださいという感じか。

キャッシュするからにはヒット率を計測するのも大事だよなぁと改めて。

20 章 フレームワーク依存症

これは耳が痛い。Rails で開発してた時は「STI 便利だしなぁ」とつい使ってしまう部分もあった。(余分なカラムが極力できないような箇所ではあったが、、)

最後に

ブログを書きながら、またさっと一周したけれど、簡単に見返せるサイズで読みやすく、すごく良い本だなと思いました。たまたま物理本で買ったけど、物理で買って良かった本だでした。