MySQL: 主キーとインデックスで検索速度を劇的に向上させた話
MySQLで主キーは自動的にインデックス化されますか?
詳細:
- 主キー制約を指定した列には、ユニークインデックスが自動的に作成されます。
- このインデックスは、クラスタ化インデックスとして使用されます。
- クラスタ化インデックスは、テーブル内のデータの物理的な順序を決定します。
- 主キーは、データの重複を防ぎ、レコードを一意に識別するために使用されます。
例:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255)
);
この例では、id
列が主キーとして定義されています。
この場合、MySQLは自動的にid
列にユニークインデックスを作成し、そのインデックスをクラスタ化インデックスとして使用します。
インデックスの利点:
- インデックスは、データの検索速度を向上させます。
- 特に、主キーによる検索は非常に高速になります。
補足:
- 主キー以外にも、UNIQUE制約を指定した列にも自動的にユニークインデックスが作成されます。
- 明示的にインデックスを作成することもできます。
関連用語:
- 主キー
- ユニーク制約
- インデックス
- クラスタ化インデックス
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255)
);
このコードを実行すると、users
テーブルが作成され、id
列に主キー制約とユニークインデックスが自動的に設定されます。
主キーによる検索
以下のコードは、id
列を指定してusers
テーブルからレコードを検索します。
SELECT * FROM users WHERE id = 1;
このコードは、id
が1であるレコードを高速に検索することができます。
以下のコードは、name
列にインデックスを作成します。
CREATE INDEX idx_name ON users (name);
主キーを自動的にインデックス化する他の方法
CREATE TABLE ステートメントで PRIMARY KEY オプションを使用する
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255)
);
この場合、MySQLは自動的にid
列にクラスタ化インデックスを作成します。
ALTER TABLE users ADD PRIMARY KEY (id);
この例では、id
列に主キー制約とクラスタ化インデックスを追加します。
CREATE INDEX ステートメントを使用する
CREATE INDEX idx_primary ON users (id);
PRIMARY KEY 制約を後で追加する
CREATE TABLE users (
id INT,
name VARCHAR(255)
);
ALTER TABLE users ADD PRIMARY KEY (id);
この例では、users
テーブルを作成してから、id
列に主キー制約を追加します。
その他の方法を使用する必要がある場合:
- 既存のテーブルに主キーを追加する場合
- 特定の種類のインデックスを作成する場合
mysql database indexing