背景
DBチューニングをする中で、 既存のテーブルを調べてみたら
キーとして主キー(primary key)とインデックス(MUL)の両方がセットされていた。
でもこの違い、聞かれてみるとよくわからない。
そこで調べてみることにした。
ここ違う!等あればコメントで教えていただけるとありがたいですm(_ _)m
※mysqlを利用
主キー(primary key) とは?
・mysqlだと「PRI」として表示される
・行の識別に使われる
・別名 primary key
・nullを許容しない
・一意である
・単一カラムOR複数カラムで設定可能
複数カラムで設定の場合は「複合主キー」と呼ばれる。
複合主キーの場合そのカラムをセットとして考えて、nullは許容しないし、一意でないとだめということ。
つまり、以下のemployeesテーブルで主キーをcompany_id、emp_id
の両方で複合主キーにした場合以下のような設定になる
NGな例
id=1 と id=2の company_id とemp_idが重複するので
このようなデータは登録できない。
ユニークキーとは?
・mysqlだと「UNI」として表示される
・一意である
・nullを許容
→値の重複は無しだけどnull許容したい時に使われる
例えば
usersテーブルでtel(電話番号)のカラムがあるとする。
電話番号は他人と重複することがないが、未設定でも登録できるようにしたい。
そんな時にtelをユニークキーとして設定できる。
インデックスとは?
・mysqlだと「MUL」として表示される
・検索速度向上のために使われる
・nullを許容する
・一意でなくて良い、同じ値を複数回登録可能
まとめ
用途 | null許容 | 一意であるか | |
---|---|---|---|
主キー | 行の識別 | × | ○ |
ユニークキー | 一意であるが必須登録にしたくない場合に使う | ○ | ○ |
インデックス | 検索スピードアップ | ○ | × |
参考文献
https://ts0818.hatenablog.com/entry/2017/02/04/162513
https://www.delftstack.com/ja/howto/mysql/mul-vs-pri-vs-uni-in-mysql/