普段データを扱う(DBからデータを抜き出し、加工、意味合いを導き出す)仕事をしているので、SQLを触らない日はありません。どうしても効率的にデータを抜きたい、後で見返しても可読性が高いクエリを書きたい、実行計画を解読できるようになりたい、という要望に見事に答えてくれる1冊でした。
有用(だと思った)Tips
- ウィンドウ関数
- 毎日クエリを書いて、データ抽出→Excelにコピペ→関数を適応したり、グルーピングをしてランキングを作ったり…。こういった作業が多いかと思うのですが、それをDB側でやってくれる機能。
- partition by と order by 句の組み合わせでグルーピング処理できる。
- 例えば、地域ごとの売上げランキングを作りたいとか。
- CASE式
- 条件分岐をさせたいですよね。地域Aは〜〜処理、地域Bは〜〜処理とか。
- ExcelのIF文でも対応可能ですが、データが膨大、かつ複数条件とかで面倒な時に使えます。
- WHERE句で条件を書き複数SQLをUNIONするのは初心者。
- 結合の種類
- 自分でコントロールできる部分は少ないとはいえ、パフォーマンス・チューニングをしなければいけない場合に知っておくと便利な知識。
- Nested Loop・Hash Join・Sort Marge
- テーブルアクセスをできるだけ減らせ!
- 本書に出てくる中で最も肝心な言葉。
- サブクエリで同じテーブルにアクセスしにいくのはできるだけ抑える。
- パフォーマンスを出したい!と思った時にいかに「1回のアクセスで必要なデータを取りにいけるか?」に知恵を絞る。
- サブクエリは積極的に使うな
- ついつい使いがちなサブクエリ。だって便利だし、頭の中のロジックがそのままかけるのでついつい使ってしまう。
- しかし、上記のように、同じテーブルに何回もアクセスしにいくのはDB側にとっては、「またおんなじテーブルをスキャンかよ…」ということ。
- できるだけ使わないようにしたほうが早い。
トレードオフ
本書でよく言及されている言葉。何事もにメリット・デメリットがあるわけで。
例えば「ぐるぐる系処理」(ループをさせる)と「ガツン系処理」をさせる際にどちらがパフォーマンスがよいか?など。
何事にも絶対的な解は無くて、状況によって最適なソリューションを見つけていくことが肝要。ソリューションの種類とそのメリデメを見極めるためにソリューションを熟知しておくことが重要ですね。
例えば「ぐるぐる系処理」(ループをさせる)と「ガツン系処理」をさせる際にどちらがパフォーマンスがよいか?など。
何事にも絶対的な解は無くて、状況によって最適なソリューションを見つけていくことが肝要。ソリューションの種類とそのメリデメを見極めるためにソリューションを熟知しておくことが重要ですね。
DBを使う人はぜひ
バックエンドエンジニアや、BI/DWHを扱うエンジニア、分析のためにSQLを使う必要がある人など、DBが仕事にとって重要な位置を占める人は一読しておいて損は無い一冊です。