SQL実践入門を読んだ

DBとかSQL周辺は、なんだかmysqlとかpostgresqlとかあって、selectとinsertとかjoinとか出来るよね。 みたいなミジンコ並みの理解しかなかったので、少しDB力を上げるべく本を読むことにしました。

雑ながらも知りたい内容はいくつかあって、

  • 実行計画とか気にしてるとなんだかかっこよさそうなので、気にできるようになりたい
  • window関数とかよくわからないけど、とりあえずどういうものがあるのかだけでも知りたい
  • インデックスめっちゃ適当に貼ってるけど、どこに貼ればええのん
  • 良いテーブルの設計について知りたい

みたいなのが分かる奴がいいなーと漠然と思っていました。

データベース関連の本と一口にいっても色々ある上に、SQLの本当に初歩から始める物が多くて何を選んでいいかよく分からなかったんですが、

「SQL実践入門」読んだ - tom__bo’s blog

という感じに知り合いが読んで書評を書いていたので、(知りたいことがオールインワンって感じではなさそうだけど、)良さそうだなーと思って読みました( ⁰⊖⁰)

内容と感想

この本ではSQLのパフォーマンスについて重点的に取り上げられています。

なんとほぼ全てのSQLサンプルコードにPostgreSQLOracleの実行計画が載っているレベルでパフォーマンスに注意を払っています。 また、joinのNested loopsでは駆動表と内部表のどっちを小さくすべきか、 Hash・Mergeとの性能上の違いは何か。 そもそもjoinとか実行計画途中で変わるし、避けられるなら避けたいよね。相関サブクエリで書くよりウィンドウ関数で書いたほうがテーブルアクセスの回数が減らせるから早いよねみたいな事例がたくさん書いてあります。この辺、まず選択肢が何あるのか知らない!みたいな人にはぜひおすすめです。

インデックスについても、テーブル全体の5%以下の行にアクセスしたい場合(目安)じゃないと逆効果になることもあるよみたいな事が書いてあって、 適当に貼っておけばええんやろと思っていた自分としては、反省せねばという気持ちになりました(´・_・`)

本の最後の方では、これこれこういっためんどくさい問題もこういう複雑なSQL書けばできる・・と思うでしょ?元のテーブルにフラグたしとけば楽だよ。でも夜間バッチ処理が必要だから運用コストは上がるしリアルタイム性は下がるから、どっちがいいか考えて使ってね。といったことが書いてあって実務で培った経験やバランス感覚がにじみ出ている点も面白かったです。

最初の箇条書きで下2つに上げたようなテーブル設計関連の話や、マスター・スレーブ構成といったDBサーバー周辺の話は、本書の中心事項ではないようなので他の本で補うことにします。DB実践入門ではなくSQL実践入門というタイトルにも納得。

全体的にわかりやすくて、良い本だったのでおすすめです( ⁰⊖⁰)

0xDBE

本とは関係ないけど写経はjetbrains社が現在製作中のDB用IDE「0xDBE」を使いました。

補完も効くし、ヒストリーもあるし、表示も見やすい感じです。

0xDBE :: Features Overview

普段あんまり書かない人でも、この手の本を写経するときは便利なのでぜひお試しください( ⁰⊖⁰) しかもSQL実践入門はサンプルコードが公開されているので、面倒なサンプルデータのinsertとかはガガッとカットすることができます。

サポートページ:SQL実践入門──高速でわかりやすいクエリの書き方:|技術評論社

ということでこちらもお勧めです。