「SQL実践入門」を読んだ。
読んだ理由
DBとSQLをやりたくなった。
1章
- ストレージ(ディスク)はアクセス低速、メモリは高速。
- DBMSの実行計画を読んでチューニングしなければならないときがある。
2章
WHEREの条件での 等しくない (!=的なの)は以下
<>
- CASE式は条件分岐を式で表現できる。式なので様々な場面で使える。
- ウィンドウ関数は、GROUP BY関数から集約機能を取り除き、カットの機能だけ残したもの。
3章
- SQL内で手続き型言語でいう「if」のような分岐を使いたくなったときは、CASE式が利用できないか考える。
- UNIONでの条件分岐はテーブルフルスキャンの回数が増しやすいので、CASE式の利用などで代用できないか検討する。
4章
- GROUP BY関数やウィンドウ関数は内部的にソートやハッシュの処理が行われている。(メモリを利用するが、足りないときストレージ(TMP領域)を利用し、その場合、処理が低速になる。)
6章
- 結合の基本はNested Loopで行われる。
- テーブル同士のレコード数がともに膨大な場合の結合の場合、Hashマージになる場合がある。
- 結合は、複数のアルゴリズムが存在することから、とつぜん実行計画が変更され、パフォーマンスが急激に変化することがある。
7章
- サブクエリと結合をウィンドウ関数に代替することでパフォーマンスを改善できることがある。
- サブクエリを使って、結合対象を先に集約しておくことで、パフォーマンスが改善することがある。
9章
- モデル変更(データ構造)の変更によって問題を解決できるケースがある。
- 一度定まってデータ構造を変更するのは困難を伴うケースが多いため、できる限り最初の設計の段階で頭を使う。
10章
- 選択率をコントロールするためには、UI側(あるいはアプリケーション側)で設計する必要がある。