【初心者向け】MySQL のインデックスの基礎 - データベース検索を高速化する仕組み

2024-04-02

MySQLにおけるINDEX、PRIMARY、UNIQUE、FULLTEXTの違い

MySQLでは、4種類の主要なインデックス类型があります。それぞれ異なる特性を持ち、状況に応じて使い分けることが重要です。

INDEX

  • 基本的なインデックスです。
  • データの検索速度を向上させる。
  • 一意性やNULL値の許可など、制約は設けられない。

PRIMARY KEY

  • 特殊なUNIQUEインデックスです。
  • テーブル内に必ず1つ存在する。
  • すべての行を一意に識別する。
  • NULL値は許可されない。

UNIQUE

  • 一意性の制約を設けるインデックスです。
  • 同じ値を持つ行は2つ以上存在できない。

FULLTEXT

  • テキストデータに対する全文検索を高速化するインデックスです。
  • 部分一致検索や前方一致検索などの高度な検索が可能になる。

それぞれの違いをまとめた表

インデックス種類特性制約用途
INDEX基本的なインデックスなし検索速度向上
PRIMARY KEY特殊なUNIQUEインデックス一意性、NULL不可行の一意識別
UNIQUE一意性制約一意性、NULL 1つのみ可重複防止
FULLTEXT全文検索用インデックスなしテキスト検索高速化

使い分けの例

  • 氏名など、重複が許されない列にはPRIMARY KEYまたはUNIQUEインデックスを使用する。
  • 商品名など、部分一致検索を行う可能性がある列にはFULLTEXTインデックスを使用する。
  • その他の列には、検索速度向上目的でINDEXを使用する。

補足

  • インデックスは、データの更新や削除を行う際にオーバーヘッドが発生するため、必要に応じて適切なインデックスを選択することが重要です。
  • 複数のインデックスを組み合わせることで、より効率的な検索が可能になる場合もあります。



CREATE INDEX index_name ON table_name (column_name);

例:

CREATE INDEX idx_last_name ON customers (last_name);
CREATE TABLE table_name (
  column_name1 datatype,
  column_name2 datatype,
  PRIMARY KEY (column_name1)
);
CREATE TABLE customers (
  id INT AUTO_INCREMENT PRIMARY KEY,
  first_name VARCHAR(255),
  last_name VARCHAR(255)
);
CREATE UNIQUE INDEX index_name ON table_name (column_name);
CREATE UNIQUE INDEX idx_email ON customers (email);
CREATE FULLTEXT INDEX index_name ON table_name (column_name);
CREATE FULLTEXT INDEX idx_product_description ON products (description);

複合インデックス

複数の列を組み合わせてインデックスを作成することもできます。

CREATE INDEX index_name ON table_name (column_name1, column_name2);
CREATE INDEX idx_city_state ON customers (city, state);

インデックスの削除

DROP INDEX index_name ON table_name;
DROP INDEX idx_last_name ON customers;



MySQLでインデックスを作成する他の方法

CREATE TABLEステートメント

テーブルを作成時に、PRIMARY KEYやUNIQUE制約を指定することで、インデックスを同時に作成することができます。

CREATE TABLE table_name (
  column_name1 datatype,
  column_name2 datatype,
  PRIMARY KEY (column_name1),
  UNIQUE (column_name2)
);
CREATE TABLE customers (
  id INT AUTO_INCREMENT PRIMARY KEY,
  first_name VARCHAR(255),
  last_name VARCHAR(255) UNIQUE
);

MySQL WorkbenchなどのGUIツールを使用すれば、GUI操作で簡単にインデックスを作成することができます。

データベース管理ツール

phpMyAdminなどのデータベース管理ツールを使用すれば、Webブラウザ上でインデックスを作成することができます。

それぞれの方法のメリットとデメリット

方法メリットデメリット
ALTER TABLEステートメント柔軟性が高い複雑な構文を覚える必要がある
CREATE TABLEステートメントシンプル後からインデックスを追加できない
MySQL Workbench簡単GUIツールをインストールする必要がある
データベース管理ツールブラウザ上で操作できるツールの機能に制限がある場合がある

mysql indexing key


【保存版】GROUP_CONCAT関数を超えた!MySQLで複数行をカンマ区切りにする4つの方法

GROUP_CONCAT関数 は、SELECTクエリ内で指定した列の値をカンマ区切りで連結し、1つの文字列として返す関数です。基本的な構文例下記のテーブル articles があり、各記事に紐づくキーワードをカンマ区切りで1行に取得したい場合を例として説明します。...


macOSでMySQLのmy.cnfファイルを編集する方法

macOSでは、my. cnfファイルは複数の場所に存在する可能性があります。それぞれの場所は、異なる優先順位で読み込まれます。優先順位1:/etc/my. cnfこのファイルは、すべてのMySQLユーザーに適用されます。優先順位2:~/Library/Preferences/my...


確実な接続を実現! PHP と SSL でリモート MySQL データベースに接続する方法

PHP 7.4 以降MySQL 5.7 以降OpenSSLリモート MySQL データベースへのアクセス権リモート MySQL サーバーで SSL を有効にする MySQL の設定ファイル (my. cnf) を編集し、ssl-ca、ssl-cert、ssl-key のオプションを設定します。 詳細は、MySQL の公式ドキュメントを参照してください。...


SQL SQL SQL SQL Amazon で見る



MySQLパフォーマンス向上に必須!INDEXとKEYの役割と作成方法

このインデックスについて説明する際に、INDEXとKEYという2つの言葉が使われますが、実は同じ意味を表します。これは単なる呼称の違いであり、機能や役割に違いはありません。歴史的な経緯MySQLの初期バージョンでは、インデックスをKEYという言葉で呼んでいました。しかし、バージョン5


MySQLデータベースのパフォーマンスを向上させる!キー、主キー、ユニークキー、インデックスを使いこなす

キーは、テーブル内の1つまたは複数の列を識別するために使用されるものです。キーは、データの検索や更新、削除などに使用されます。主キーは、テーブル内の各レコードを一意に識別するキーです。主キーは、次の特性を持つ必要があります。すべてのレコードで値がNULLではない


データベースの奥深さを知る!MySQLの主キーインデックスとセカンダリインデックスの高度な活用術

主键インデックスは、主キーと呼ばれる、テーブル内の各行を一意に識別する列に作成されます。主キーインデックスは、データベースがデータを効率的に格納して検索できるようにするために常に存在します。一方、セカンダリインデックスは、主キー以外の列に作成されます。セカンダリインデックスは、主キー以外の列でデータを検索する速度を向上させるために使用されますが、必須ではありません。