MySQLデータベースのパフォーマンスを向上させる!キー、主キー、ユニークキー、インデックスを使いこなす
MySQLにおけるキー、主キー、ユニークキー、インデックスの違い
キーは、テーブル内の1つまたは複数の列を識別するために使用されるものです。キーは、データの検索や更新、削除などに使用されます。
主キーは、テーブル内の各レコードを一意に識別するキーです。主キーは、次の特性を持つ必要があります。
- すべてのレコードで値がNULLではない
- テーブル内に1つだけ存在する
ユニークキー
インデックスは、テーブル内の列の値を高速に検索するために使用されるデータ構造です。インデックスは、キーに基づいて作成されます。
それぞれの違い
キー | 主キー | ユニークキー | インデックス |
---|---|---|---|
役割 | レコードの識別 | レコードの一意識別 | データの高速検索 |
制約 | NULL不可、一意、1つのみ | NULL不可、一意 | なし |
存在数 | 1つ | 複数可 | 複数可 |
例
- 商品テーブル
- 主キー:商品ID
- ユニークキー:商品名
- インデックス:価格、カテゴリー
- キーは、データの検索や更新、削除などに使用される。
- 主キーは、テーブル内の各レコードを一意に識別するキー。
- インデックスは、データの高速検索のために使用される。
これらの概念を理解することで、MySQLデータベースを効率的に設計、管理することができます。
-- テーブル作成
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) UNIQUE,
price DECIMAL(10,2),
category VARCHAR(50),
INDEX (category)
);
-- データ挿入
INSERT INTO products (name, price, category)
VALUES ('T-シャツ', 2500, '服'),
('ノートパソコン', 100000, '家電'),
('スマートフォン', 80000, '家電');
-- 主キーによる検索
SELECT * FROM products WHERE id = 1;
-- ユニークキーによる検索
SELECT * FROM products WHERE name = 'T-シャツ';
-- インデックスによる検索
SELECT * FROM products WHERE category = '家電' ORDER BY price DESC;
products
テーブルを作成します。id
列は主キーとして設定し、自動的に1ずつ増加します。name
列はユニークキーとして設定し、重複した値を挿入できません。price
列は商品の価格を格納します。category
列は商品のカテゴリーを格納します。category
列にインデックスを作成します。
実行結果
-- 主キーによる検索
| id | name | price | category |
|---|---|---|---|
| 1 | T-シャツ | 2500 | 服 |
-- ユニークキーによる検索
| id | name | price | category |
|---|---|---|---|
| 1 | T-シャツ | 2500 | 服 |
-- インデックスによる検索
| id | name | price | category |
|---|---|---|---|
| 3 | スマートフォン | 80000 | 家電 |
| 2 | ノートパソコン | 100000 | 家電 |
このサンプルコードは、キー、主キー、ユニークキー、インデックスの基本的な使い方を示しています。
MySQLでキー、主キー、ユニークキー、インデックスを作成する他の方法
ALTER TABLE
ステートメントを使用して、既存のテーブルにキー、主キー、ユニークキー、インデックスを追加できます。
-- 主キーを追加
ALTER TABLE products ADD PRIMARY KEY (id);
-- ユニークキーを追加
ALTER TABLE products ADD UNIQUE (name);
-- インデックスを追加
ALTER TABLE products ADD INDEX (category);
CREATE TABLE
ステートメントを使用して、キー、主キー、ユニークキー、インデックスを定義しながらテーブルを作成できます。
-- 主キーとユニークキーを定義してテーブルを作成
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) UNIQUE
);
-- インデックスを定義してテーブルを作成
CREATE TABLE products (
id INT,
name VARCHAR(255),
category VARCHAR(50),
INDEX (category)
);
GUIツール
MySQL WorkbenchなどのGUIツールを使用して、キー、主キー、ユニークキー、インデックスを作成することもできます。
その他の方法
- MySQLコマンドラインツール
- 第三者製のツール
- 既存のテーブルにキーを追加する場合は、
ALTER TABLE
ステートメントを使用するのが最も簡単です。 - 新しいテーブルを作成する場合は、
CREATE TABLE
ステートメントを使用してキーを定義するのが最も効率的です。 - GUIツールを使用すると、キーの作成が視覚的に行えるので、初心者にとって使いやすいです。
mysql indexing primary-key