0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

主キー、ユニークキー、indexの違いについて調べてみた

Posted at

背景

DBチューニングをする中で、 既存のテーブルを調べてみたら
キーとして主キー(primary key)とインデックス(MUL)の両方がセットされていた。

でもこの違い、聞かれてみるとよくわからない。
そこで調べてみることにした。

ここ違う!等あればコメントで教えていただけるとありがたいですm(_ _)m

※mysqlを利用

主キー(primary key) とは?

・mysqlだと「PRI」として表示される
・行の識別に使われる
・別名 primary key
・nullを許容しない
・一意である
・単一カラムOR複数カラムで設定可能
複数カラムで設定の場合は「複合主キー」と呼ばれる。
複合主キーの場合そのカラムをセットとして考えて、nullは許容しないし、一意でないとだめということ。

つまり、以下のemployeesテーブルで主キーをcompany_id、emp_id
の両方で複合主キーにした場合以下のような設定になる

OKな例
スクリーンショット 2022-12-26 10.16.54.png

NGな例

id=1 と id=2の company_id とemp_idが重複するので
このようなデータは登録できない。
スクリーンショット 2022-12-26 10.17.54.png

ユニークキーとは?

・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/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?