僕はDB未経験でサーバーサイドのエンジニアになりました。
SELECT文を覚えるところから始まりましたが、今では(保守/運用側ではなく)開発者側としてのDBの知識と技術は少しは身についたと思っています
そこで、未経験の状態から現在に至るまでに読んだ書籍を時系列順に紹介したいと思います。
僕のように未経験でスタートした方の参考になれば幸いです。
尚、自分の環境はSQLServerですが、最後に紹介するのマイクロソフトのドキュメント以外は、ベンダに関係なく勉強になる内容だと思います。
本当に未経験時に最初に読んだ本
■ SQL 第2版 ゼロからはじめるデータベース操作
https://amzn.to/2MOO1E0
内容紹介(amazonより抜粋)
プログラミング学習シリーズ『SQL ゼロからはじめるデータベース操作』は、「データベースやSQLがはじめて」という初心者を対象に、プロのデータベース(DB)エンジニアである著者がSQLの基礎とコツをやさしく丁寧に教える入門書です。
DB/テーブルの構造から、データを検索したり更新したりする構文、よく使う関数、テーブルの結合など、SQLによるデータベース操作の基本を学習していきます。WHERE句、GROUP BY句、HAVING句やサブクエリなど、SQLを使いこなすためのポイントとなる機能や、初心者にとって理解が難しい部分は、豊富な図とサンプルプログラムでかみくだいて解説しています。
また、標準SQLをベースに、各種DB(Oracle、SQL Server、DB2、PostgreSQL、MySQL)での違いや、初心者がハマりやすいポイント、基礎ノウハウについてもしっかり解説。
第2版では、解説・サンプルコードを最新DBのSQLに対応したほか、(PostgreSQLを例に)アプリケーションプログラムからSQLを実行する方法の解説章を新設。SQLの書き方だけはなく、アプリケーションでの利用方法までフォローします。
データベースを扱うアプリを作りたいが何から学習すれば良いかわからない、きちんとSQLを書けるようになりたい、現場で通用する基礎を身につけたい、という方におすすめの1冊です。
0ベースから学ぶ人が、SQLの基本を身に着けるために必要な内容が体系的にまとられています。
僕は最初はネットでSELECTやらGROUP BYやら検索していたのですが、後から考えると最初はあれこれ検索せずに、とりあえずこの本を1冊読むのが手っ取り早かったなぁと思いました。
未経験でもそんなに時間はかからず読める内容だと思います。
SQLに慣れてきたときに読んだ本(SQL/設計)
■ 達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ
https://amzn.to/2OU1I7d
内容紹介(amazonより抜粋)
プロのDBエンジニア必携!正しいSQLの書き方を学べる本!
開発者向けWebサイト「CodeZine」で、2006年6月から続いている人気連載を
大幅加筆・修正してカットアップ。標準SQL準拠のため、Oracle/SQL Server/DB2/
PostgreSQL/MySQL等々の幅広いデータベースに対応しているほか、実際の
開発現場でも活かしやすい実践的なコーディング事例も多数紹介しています。
チューニングテクニックやリレーショナルデータベースの歴史なども網羅しており、
脱初級や、より高みを目指したいDBエンジニアに必携の一冊です。
「SQL 第2版 ゼロからはじめるデータベース操作」と同じ著者が書かれた本です。SQLについて、一歩進んだ内容が書かれています。
とりあえずSQL書ける、っていう人なら問題なく読み進めることができると思います。
GROUPBY/PARTITIONBYの違いがすごく分かりやすく書いてあったな~という思い出があります。
相関サブクエリについて/NULLについて/リレーショナルDBについてなど、今思えば最初にしっかり読んでおいてよかったな、という内容が結構あります。
パフォーマンスチューニングやSQLのコーディングスタイルにも軽くですが触れられており、意識するきっかけにもなりそうです。
■ 達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ
https://amzn.to/2VSL1L0
内容紹介(amazonより抜粋)
●DB設計の“正しい考え方”と“実践ノウハウ”を身につけたいあなたに
好評を博した『達人に学ぶ SQL徹底指南書』の続編がついに登場。今回は、プロのデータベース(DB)
エンジニアである著者が、DB設計の基礎と実践ノウハウをやさしく手ほどきします。
本書では、主に次の内容を学びます。
・DB設計の基礎知識と初級者がつまづきやすいポイント
・パフォーマンス/性能設計
・正規化/非正規化のケーススタディ
・やってはいけないバッドノウハウ
・注意すべきグレーノウハウ
豊富な例と演習問題で、無理なく現場で通用する実践的な力が身につく構成になっています。
DBエンジニアを目指す人、DB設計の基礎と実践をしっかり学びたい人、脱初級を目指すアプリケーション開発者や
DBエンジニアなど、DB設計/システム開発に携わるすべての方におすすめの一冊です。
設計について、最初のころにとりあえず一冊読んでおいて損はないと思います。
正規化、ER図についてや、非正規化によるパフォーマンス向上とデメリットについても書かれており、チューニングの選択肢の1つである非正規化についても学ぶことができます。
ここまでの書籍を読んだら、ER図-SQLを頭の中で行き来できるようになるというか、、、上手くいえないのですが、ER図を読み書きできるようになったのはこの本を読んでよかったと思う点の一つです。
※2019年10月現在、第二版が最新版として出版されており、こちらをお勧めします。
DB開発をある程度経験した後に読んだ本
■ SQLアンチパターン
https://amzn.to/2BhLRHo
内容紹介(amazonより抜粋)
本書はDB設計やSQL記述の際に避けるべき事柄を1章で1つ、25個紹介する書籍です。
リレーショナルデータベースを中心に据えたシステム開発には、様々な場面で陥りやすい失敗(アンチパターン)があります。
本書はデータベース論理設計、データベース物理設計、クエリの記述、アプリケーション開発という4つのカテゴリに分かれて、それぞれの分野におけるアンチパターンを紹介し、失敗を避けるためのより良い方法を紹介します。
複数の値を持つ属性や再帰的なツリー構造の格納から、小数値の丸めやNULLの扱いに起因する問題、全文検索やSQLインジェクション、MVCアーキテクチャなど、実践的かつ幅広いトピックを網羅します。
データベースに関わるすべてのエンジニア必携の一冊です。
DB開発に関するダメなあるあるを紹介しつつ、どうすれば回避できるのかを教えてくれます。
未読の人は読んで損は無い、良書だと思います。とある会社では入社して1年たったら読ませる、と仰っていました。
■ SQL実践入門──高速でわかりやすいクエリの書き方
https://amzn.to/2VMvZq3
内容紹介(amazonより抜粋)
SQLはデータベース操作に特化した言語で、柔軟にデータを操作できます。ただし、独自のロジックに基づいているため、それを正しく理解しなければ、読みづらくパフォーマンスの出ないSQLになってしまいます。本書では、「条件分岐」「集約」「ループ」「結合」「更新」など日常的に実行する処理の良い書き方・悪い書き方を解説します。その際、データベース内部でどう処理が実行されているかを示す実行計画を読み解くことで、「なぜそう書くと効率が良いのか」「可読性や保守性が向上するのか」を実感を持って理解することを目指します。
第1章:DBMSのアーキテクチャ──この世にただ飯はあるか
第2章:SQLの基礎──母国語を話すがごとく
第3章:SQLにおける条件分岐──文から式へ
第4章:集約とカット──集合の世界
第5章:ループ──手続き型の呪縛
第6章:結合──結合を制する者はSQLを制す
第7章:サブクエリ──困難は分割するべきか
第8章:SQLにおける順序──甦る手続き型
第9章:更新とデータモデル──盲目のスーパーソルジャー
第10章:インデックスを使いこなす──秀才の弱点
Appendix A:PostgreSQLのインストールと起動
Appendix B:演習問題の解答
この本を購入したころ、どうしても既存のクエリが重かったり、既存のインデックスが有効でない新規クエリを作成するケースなどが出てきたため、チューニングについて最初のころより強く意識するようになっていたタイミングでした。
表紙の「実行プランを読み解きボトルネックを解消する」というワードに惹かれて購入しました。
いろいろなSQLに対して、実行プランを同時に掲載し、読み解きながらハイパフォーマンスなSQLを書くためのポイントが学べます。
SQLServer 利用者向け
■ インデックスの基礎とメンテナンス(3ページ目くらいにあります) ※リンク切れとなっていました。。
https://www.microsoft.com/ja-jp/server-cloud/local/documents/default.aspx?pdid=SQL&svid=all_SV&dtid=all_DT
チューニングのためには、使用しているDB製品のデータの格納形式について理解する必要があるかと思います。
SQLServerについては、マイクロソフトの公式のドキュメントを読むとすごく分かりやすいです。
実際にSSMSを使ってグラフィカル実行プランの表示をみたり、SQLServerのレコードの格納方式(非クラスタ化インデックス、クラスタ化インデックス)とインデックスの関係が分かりやすく説明されています。
このドキュメントを読んだ後だと、インデックスを張る前後の実行プランの変化を想像できるようになると思います。
※ここまでで、期間としては2年とちょっとくらいだったと思います。
最後に
当たり前かもしれませんが、結局自分で手を動かして考えることが重要だなと思います。
書籍はまとまった知識が得られるので、読書と実践を繰り返すと一番いいのかなと思いました。
少しでも参考になれば幸いです。