はじめに
数年前、本番環境で重いバッチ処理のボトルネックを調査していたとき、自分のSQLの知識が表面的だったことを痛感した。SELECT文は書ける。JOINも理解している。だがインデックスの内部構造やオプティマイザの挙動となると、勘と経験頼みだった。
そこからSQL関連の書籍を片っ端から読み漁り、パフォーマンスチューニングの原理原則を身につけたことで、クエリの実行計画を読み解く力が格段に上がった。結果として、チーム内で「SQLで困ったらあいつに聞け」と言われるようになった。
この記事では、自分が実際に読んで血肉になった4冊を紹介する。初心者向けの入門書は扱わない。すでにCRUD操作やテーブル設計の基本を理解していて、そこから一段上に行きたい人を想定している。
選定基準は明快で、コード例が豊富であること、複数のDBMS横断で使える知識が得られること、そして日本語で読める本を優先した。
① SQLパフォーマンス詳解 — Markus Winand
Markus Winandはインデックスとクエリ最適化の専門家で、「Use The Index, Luke」というWebサイトの著者としても知られている。
この本はインデックスの仕組みに絞り込み、B-Treeの構造からフルテーブルスキャンとインデックススキャンの違い、複合インデックスのカラム順序が性能に与える影響まで、段階的に解説してくれる。薄い本だが密度が高い。
Oracle、PostgreSQL、MySQL、SQL Serverの4つのDBMSについて、実行計画の読み方をそれぞれ示しているのが大きな強みだ。職場でDBMSが変わっても応用が利く。
自分が最も衝撃を受けたのは、WHERE句の条件の書き方ひとつでインデックスが使われなくなる具体例だった。関数でカラムを包むとインデックスが死ぬ、という話は知識として知っていたが、内部で何が起きているかを図解で見せてもらい、腹落ちした。
こんな人に: クエリが遅い原因をEXPLAIN結果から自力で突き止めたい開発者やDBA。
② SQLクックブック 第2版 — Anthony Molinaro, Robert de Graaf
Anthony Molinaroは長年データウェアハウスの現場で働いてきたSQL実践者だ。第2版では共著者にRobert de Graafが加わり、ウィンドウ関数やCTEなど現代的なトピックが大幅に追加された。
構成はレシピ形式で、「こういうことをしたい」という課題に対して解法を示すスタイルになっている。文字列のパース、階層データの再帰クエリ、ピボット処理など、業務で必ず遭遇するパターンが網羅されている。
レシピごとにOracle、PostgreSQL、MySQL、SQL Serverでの書き分けが載っている点が実用的だ。チームによって使うDBが異なる環境でも、手元に置いておけば即座に参照できる。
個人的に重宝したのはウィンドウ関数の章で、ROWS BETWEENとRANGE BETWEENの挙動差を実例で比較してくれるため、移動平均やランキング処理を自信を持って書けるようになった。
こんな人に: 日々の開発でSQLを書くが、複雑な要件のたびにStackOverflowを漁っている人。
③ プログラマのためのSQL 第4版 — Joe Celko
Joe CelkoはANSI SQL標準化委員会に10年在籍した、SQL界の重鎮だ。彼の著書は理論と実践のバランスが取れていることで定評がある。
この本は単なるクエリ集ではなく、リレーショナルモデルの考え方から正しいデータ型の選択、集合演算の設計思想まで踏み込む。SQLを「手続き型言語の延長」で書いてしまう癖を矯正してくれる。
NULLの三値論理、GROUP BYとHAVINGの正しい使い分け、CASE式による条件分岐のパターンなど、基礎に見えて実は理解が曖昧なテーマを厳密に扱っている。分厚い本だが、目次を引いて辞書的に使うことも可能だ。
自分はこの本でSQL的な集合思考が身についた。カーソルで1行ずつ処理していた部分を集合演算に書き換えたとき、処理速度が10倍以上改善した体験は忘れられない。
こんな人に: 手続き型の発想からSQLの集合指向思考に切り替えたいプログラマ。
④ SQLクイックリファレンス — Kevin Kline, Daniel Kline
Kevin Klineはデータベース管理分野で20年以上のキャリアを持つSQL Serverのエキスパートで、カンファレンス登壇も多い。
この本は名前のとおりリファレンスだ。Oracle、SQL Server、MySQL、PostgreSQLの構文差異をクロスプラットフォームで引ける構成になっている。各コマンドの対応状況や方言が一覧できるため、複数DBMS間の移植作業が発生する現場で真価を発揮する。
通読する本というよりも、デスクに常備して困ったときに開く本だ。CREATE TABLE一つとっても、DBMSごとの制約構文やデフォルト値の違いをすぐに確認できる。
自分のチームではPostgreSQLからMySQL移行プロジェクトの際にこの本を頻繁に参照した。構文の細かい差異を事前に把握できたことでトラブルが減り、移行スケジュールの遅延を防げた。
こんな人に: 複数のRDBMSを横断して仕事をする必要があるエンジニアやDBA。
まとめ
| ステップ | 読む本 | 得られるもの |
|---|---|---|
| 1. 性能の原理を知る | SQLパフォーマンス詳解 | インデックスと実行計画の読解力 |
| 2. 実装パターンを増やす | SQLクックブック 第2版 | 業務頻出クエリの引き出し |
| 3. 集合思考を身につける | プログラマのためのSQL 第4版 | SQL設計の根本的な思考法 |
| 4. 構文差異を把握する | SQLクイックリファレンス | クロスDBMS対応力 |
今の課題に応じて最初の1冊を選ぶなら:
- クエリが遅くて困っている → SQLパフォーマンス詳解
- 複雑な要件をSQLで表現できない → SQLクックブック 第2版
- そもそもSQLの書き方が手続き的すぎると感じる → プログラマのためのSQL 第4版
- 複数DBMSの構文差異に振り回されている → SQLクイックリファレンス
どれも一度読んで終わりではなく、現場で壁にぶつかるたびに立ち返る本だ。手元に置いて繰り返し参照することで、確実にSQLの実力が積み上がっていく。