Mysqli-indexes

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

MySQLi-インデックス

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

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

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

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

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

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

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

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

1つ以上の列を使用して、インデックスを作成できます。 たとえば、NAME_INDEXを使用して、tutorials_infにインデックスを作成できます。

CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf(name);

テーブルに単純なインデックスを作成できます。 単純なインデックスを作成するには、クエリからUNIQUEキーワードを省略します。 単純なインデックスを使用すると、テーブル内の値を複製できます。

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

mysql> CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf (name 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 tutorials_inf ADD INDEX (id);

ALTERコマンドとともにDROP句を使用して、任意のINDEXを削除できます。 上記のインデックスを削除するには、次の例を試してください。

mysql> ALTER TABLE tutorials_inf DROP INDEX (c);

ALTERコマンドとともにDROP句を使用して、任意のINDEXを削除できます。 上記のインデックスを削除するには、次の例を試してください。

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

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

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

mysql>  ALTER TABLE tutorials_inf MODIFY id INT NOT NULL;
mysql> ALTER TABLE tutorials_inf ADD PRIMARY KEY (id);

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

mysql> ALTER TABLE tutorials_inf DROP PRIMARY KEY;

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

INDEX情報の表示

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

次の例を試してください

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