ISBN 9784798153995
Effective SQL
概要
実務課題に対応したSQL設計と記述力を61のTipsで体系化する
想定読者
SQLの基本操作は習得済みで、データモデル設計・インデックス最適化・複雑なクエリ構築を実務で担うデータベース利用者
こんな人には向いていない
- SQLの文法・基本構文を初めて学ぶ段階の人には前提知識の不足が想定される。本書はSQL記述の「最適化」と「設計判断」を扱うため、入門者向けではない
- 特定のDBMS(PostgreSQL・MySQL等)固有の方言やチューニング技法を深掘りしたい場合は、標準SQL中心の本書とは目的が異なる。方言版はGitHubに委ねる構成のため、DBMS固有の深さは期待できない
この本で身につくこと
- データモデル設計の問題を構造的に整理し、正規化とパフォーマンスのバランスを判断できる
- インデックス設計の原則を踏まえてクエリ生産性を改善できる
- 設計変更が不可能な既存システムに対してSQL的な回避策を組み立てられる
- サブクエリ・アグリゲーション・直積問題など複雑なケースに対応したSQL構文を記述できる
- タリーテーブルや階層データ構造といった高度なパターンを実装できる
ハイライト(外部からの言及)
さまざまなケースにマッチした最適なSQLを自然に記述できるようになるための知見と勘所を、具体的なテーブルやDB構成とともに解説します — 出典
本書の設計意図を端的に示す箇所。チュートリアル型ではなく実課題解決型であることが読み取れる
解くべき問題を明確にし、次にその解決方法を整理し、考え方を標準的なやり方で提示し、必要であれば方言でも参照できる — 出典
各Tipsの構成パターンを示しており、問題→解法→標準実装→方言対応という学習フローが本書の骨格
章立て
第1章 データモデル設計
本書全体の出発点。設計の善し悪しが後続章の全課題に影響するため、最初に丁寧に読む
第2章 生産性とインデックス設計
実務直結度が高く、クエリ改善の即効性を求める場合は第1章の次に優先すると良い
第3章 設計の変更ができないときの対処法
既存システム改修の現場で特に参照価値が高い章
第4章 フィルタリングと検索
第5章 アグリゲーション
第6章 サブクエリ
第7章 メタデータの取得と分析
第8章 直積問題
第9章 タリーテーブル(複雑なSQLのために)
概念が独特なため、第4〜6章を理解してから取り組むと定着が速い
第10章 階層的なデータ構造
関連記事 / 参考情報
- 2017冬休み課題図書10選 — 2017年末にエンジニア向けに選定された技術書10冊のひとつとして本書が紹介されている
学習のヒント
- 第1章(データモデル設計)と第2章(インデックス設計)は本書全体の基盤となるため、まず通読してから後の章を問題別リファレンスとして活用する二段構えが効率的
- GitHubで公開されている方言版サンプルを手元のDBで実際に動かしながら進めると、標準SQLと各DBMSの差分を体感として把握できる。付属コードを動かさない読み方は理解の定着が浅くなりやすい
- 第3章「設計の変更ができないときの対処法」は既存システム改修案件で特に参照価値が高い。現行業務の設計制約と照らし合わせながら読むと応用しやすい
- 第8章(直積問題)・第9章(タリーテーブル)は概念が特殊で難易度が高い。第4〜6章を一通り終えてから取り組むと理解の定着が速い
前提知識
- SQLのDML(SELECT / INSERT / UPDATE / DELETE)とJOIN操作を実務または演習で経験していること
- リレーショナルデータベースの正規化・主キー・外部キーの概念を理解していること
- 何らかのRDBMS(MySQL / PostgreSQL / SQL Server / Oracle等)を手元で実行できる環境があること
次に読む本
SQLアンチパターン
本書でSQL設計力を身につけた後に読むと、陥りがちなアンチパターンをパターン認識レベルで識別する視点が補完できる。本書のTips集との対比で「やってはいけない設計」が明確になる
プログラマのためのSQL 第4版
本書と同じ「標準SQLで実務力を底上げする」路線の定番書。本書で扱うデータモデル・集合論的思考をより深く掘り下げたい場合の継続読書として有効
出版社による内容紹介
どれだけクライアント側のUXが変わっても、アルゴリズムが変更されても、変わらないのがリレーショナルデータベースの世界。それだけに経験値とベンダーごとに微妙に異なる方言を操るための“鍛錬”は必須の世界といえます。 しかし“鍛錬”は、それこそ思考し手を動かさなければ鍛錬とは言えません。 そこで本書では、単なる教科書的なSQL文の組み立て(鍛錬の方法)を超えて、さまざまなケースにマッチした最適なSQLを自然に記述できるようになるための知見と勘所を、具体的なテーブルやDB構成とともに解説します。 そのためSQL方言は極力排し、標準SQLで解説を行い、各サンプルの方言版はGitHubで公開するという方法を取っています。 つまり、 ・解くべき問題を明確にし、 ・次にその解決方法を整理し、 ・考え方を標準的なやり方で提示し、 ・必要であれば方言でも参照できる、 というスタイルです。 SQLの現場ですぐに使える……、というのは大袈裟ですが、必ず解決策にたどり着けるヒントや知見にあふれた、全61のTips集です。 [目次] 第1章 データモデル設計 第2章 生産性とインデックス設計 第3章 設計の変更ができないときの対処法 第4章 フィルタリングと検索 第5章 アグリゲーション 第6章 サブクエリ 第7章 メタデータの取得と分析 第8章 直積問題 第9章 タリーテーブル(複雑なSQLのために) 第10章 階層的なデータ構造 第1章 データモデル設計 第2章 生産性とインデックス設計 第3章 設計の変更ができないときの対処法 第4章 フィルタリングと検索 第5章 アグリゲーション 第6章 サブクエリ 第7章 メタデータの取得と分析 第8章 直積問題 第9章 タリーテーブル(複雑なSQLのために) 第10章 階層的なデータ構造
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。