Web備忘録

雑多に書いています

「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側(あるいはアプリケーション側)で設計する必要がある。