PostgreSQL

主キーについて

PRIMARY KEY制約 = NOT NULL制約とUNIQUE制約をいっしょに付けたのと同じ。
テーブルの中での一意な値。で、1テーブル内には1つだけ。
インデックスも自動で作成される。

create table data_tb (
    id integer primary key,
    date timestamp default NOW() not null,
    memo varchar(200)
); 

インデックスについて

データの検索速度を上げるために、カラムに対して作成する索引のこと。
とある1レコードのデータを検索するとき、やみくもに順番に1レコードずつ調べていくよりも、
特定のカラムでばばばばーっと検索・位置を特定してから、そのレコードを読み込む。


とくに大きなテーブルでは効果を発揮するけど、
貼り方をまちがえると逆にパフォーマンス低下につながるので、注意が必要。

パフォーマンスUP↑↑なパターン
  • 表の結合条件に使用される列に対して作成。
  • 違う値が多くてばらついてる列に対して作成。
パフォーマンスDOWN↓↓なパターン
  • 値があんまりばらついてない列に対して作成。
  • 更新頻度の高いテーブルで作成(テーブル更新のたびにインデックスも更新されるため)
create index date_index on data_tb (date);
drop index date_index;

ちなみに、drop tableするとインデックスも削除される。