Open23

SQLを勉強していく

winnie279winnie279

あれ、もしかして一対多のテーブルに右も左もない…?
多対一(左・右)ならinner joinもleft outer join同じ結果になるはず…
一対一なら A = B
多対一なら A ⊃ B
多対多なら A ∩ B ≠ φ
であってるのか…?

https://zenn.dev/praha/articles/65afb28caacd0b

winnie279winnie279

チューニング

  • SQLを工夫して組み立てる。
  • DBサーバーのメモリを調整する。
  • インデックスを貼る。
  • テーブルを工夫して設計する。
winnie279winnie279
  • インデックス
  • ON句を使う。
  • サブクエリの階層を減らす。
  • WHERE句で扱うデータを絞る。
winnie279winnie279

インデックスが活用されるように、「条件内にインデックス対象カラムを適切に記述しましょう」

  • 加工をしない。
  • 順番を揃える。
winnie279winnie279
  • 通常テーブル内のデータ(レコード)は、TableSpace (≒ハードディスク)で保持されている
  • クエリが実行されると、バッファプール(≒メインメモリ)上に必要なテーブルデータがロードされる。
  • 処理に必要なデータ(レコード・カラム)がバッファプールに入り切らない場合、都度ディスクからデータを読み取る必要がある(I/O が発生する)
winnie279winnie279

インデックスはデータが綺麗に並んでいる。
INSERT時に綺麗に並べてインデックスに加えることで、読み込み速度が速くなる。

winnie279winnie279

SQLite

SQLiteはMacにデフォルトでインストールされている。

データベースの作成

$ cd db
$ sqlite3 database_name.db

CSVをインポートしてテーブルを作成

sqlite3
.mode csv
.import csv_file_path table_name