Vapor Trail

明るく楽しく元気よく

『はじめてのSQL』を読んだ

 SQLは日々の業務でよく使うし、数百万件のデータを扱うようになって、インデックスを計画的に貼って、どういうクエリを発行すればいいのかまで、考えられるようになったが、実は雰囲気でSQLをやっている。このカラムは255文字以上の文字列は保存しないと思うからvarcharにするとか、11桁以上の数値を扱うからbigintにするとかはわかっているつもりというか、エラーが出ないようにそうしているだけであって、細かい型の仕様とかは実はよく知らない。where文で使っているカラムにインデックスを貼ると速くなることは知っているが、なぜ速くなるのかは実は知らない。インデックスを貼ると挿入・更新が遅くなるらしいが、なぜ遅くなるのかは実はよく知らない。そんなこんなでDBちゃんと学ばないといけないなぁと思っていたので、『はじめてのSQL』を読んだ。

・型の理解が深まった。

 Datetimeは"2019-04-01 00:00:00"といった文字列として保存するが、自動で変換されていることを初めて知った。普通に考えれば当たり前のことだが、何も考えずに使用していた。

・インデックスの理解が深まった

 B木インデックスがどのように探索されるのかを知って、複合インデックスでwhereの順番に気をつける理由をやっと理解した。本では姓と名の複合インデックスの例で、姓名を知っていれば電話帳では姓→名の順番で整理されているのですぐ探せるが、名前しか知らないと全項目を調べなければいけないという事が書かれていて、わかりやすかった。

 プログラムを学び始めたときはデータベースはアプリケーションに付随する副次的なものだと考えていたが、データベース設計は、アプリケーションの基礎になるものであって、一番大事なものではないかと最近は考えている。変なテーブル設計にするとアプリケーション側でデータを使用する際に、あれこれJOINしたり加工しなければいけなくなるので、複雑になる上、保存・取得に時間がかかってパフォーマンスが落ちてしまう。インデックスをきちんと貼っていない故のパフォーマンスが出ないとかは、インデックスを付ければいいだけなのでなんとかなるが、わけわかんないテーブルとカラムにしていてパフォーマンスが出ないとかは、もうどうしようもないのではという気持ちになるので、データベース設計もきちんと学びたい。

初めてのSQL

初めてのSQL