Mysql-indexes

提供:Dev Guides
移動先:案内検索

MySQL-インデックス

データベースインデックスは、テーブル内の操作の速度を向上させるデータ構造です。 インデックスは、1つ以上の列を使用して作成でき、迅速なランダム検索とレコードへのアクセスの効率的な順序付けの両方の基礎を提供します。

インデックスを作成する際、SQLクエリを作成し、それらの列に1つ以上のインデックスを作成するために使用されるすべての列を考慮する必要があります。

実際には、インデックスはテーブルの一種でもあり、プライマリキーまたはインデックスフィールドと各レコードへのポインタを実際のテーブルに保持します。

ユーザーはインデックスを見ることができず、クエリを高速化するためだけに使用され、データベース検索エンジンによってレコードを非常に高速に検索するために使用されます。

INSERTおよびUPDATEステートメントはインデックスを持つテーブルではより時間がかかりますが、SELECTステートメントはこれらのテーブルで高速になります。 その理由は、挿入または更新を行っている間、データベースもインデックス値を挿入または更新する必要があるためです。

シンプルでユニークなインデックス

テーブルに一意のインデックスを作成できます。 一意のインデックスは、2つの行が同じインデックス値を持つことはできないことを意味します。 以下は、テーブルにインデックスを作成する構文です。

CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);

1つ以上の列を使用して、インデックスを作成できます。

たとえば、 tutorial_author を使用して tutorials_tbl にインデックスを作成できます。

CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author)

テーブルに単純なインデックスを作成できます。 クエリから UNIQUE キーワードを省略して、単純なインデックスを作成します。 シンプルインデックスは、テーブル内の重複値を許可します。

列の値を降順でインデックス付けする場合は、列名の後に予約語DESCを追加できます。

mysql> CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author DESC)

INDEXを追加および削除するALTERコマンド

テーブルにインデックスを追加するためのステートメントの4種類があります-

  • * ALTER TABLE tbl_name ADD PRIMARY KEY(column_list)-このステートメントは、 *PRIMARY KEY を追加します。これは、インデックス値が一意でなければならず、NULLであってはならないことを意味します。
  • * ALTER TABLE tbl_name ADD UNIQUE index_name(column_list)*-このステートメントは、値が一意でなければならないインデックスを作成します(複数回出現する可能性があるNULL値を除く)。
  • * ALTER TABLE tbl_name ADD INDEX index_name(column_list)*-これは、任意の値が複数回現れる可能性がある通常のインデックスを追加します。
  • * ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list)*-これは、テキスト検索に使用される特別なFULLTEXTインデックスを作成します。

次のコードブロックは、既存のテーブルにインデックスを追加する例です。

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

ALTERコマンドと一緒に DROP 句を使用して、任意のINDEXを削除できます。

上記のインデックスを削除するには、次の例を試してください。

mysql> ALTER TABLE testalter_tbl DROP INDEX (c);

ALTERコマンドとともにDROP句を使用して、任意のINDEXを削除できます。

プライマリキーを追加および削除するALTERコマンド

同じ方法で主キーを追加することもできます。 ただし、主キーがNULL以外の列で機能することを確認してください。

次のコードブロックは、既存のテーブルに主キーを追加する例です。 これにより、最初に列がNOT NULLになり、次に主キーとして追加されます。

mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

次のようにALTERコマンドを使用して主キーを削除できます-

mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;

PRIMARY KEYではないインデックスを削除するには、インデックス名を指定する必要があります。

INDEX情報の表示

*SHOW INDEX* コマンドを使用して、テーブルに関連付けられているすべてのインデックスをリストできます。 長い行の折り返しを避けるために、垂直形式の出力(\ Gで指定)がこのステートメントで役立つことがよくあります-

次の例を試してください-

mysql> SHOW INDEX FROM table_name\G
........