インデックスは、データベースの索引である。
インデックスを利用すれば、目的のレコードにダイレクトにアクセスできるようになる。
それでは、実際に操作してみよう。
まずは、mysqlクライアントを起動しよう。
PS C:\Users\vinta> mysql -u myusr -p
Enter password: *****
続いて、basicデータベースに移動しよう。
mysql> USE basic;
Database changed
SELECT 命令の状況を確認しよう
インデックスを設置していない状態でSELECT 命令を実行した場合、どれだけ手間がかかるのか確認する。
以下の通り、入力しよう。
なお、このbasicデータベースには、usrテーブルにあらかじめレコードが登録してあるものとする。
mysql> EXPLAIN SELECT uname FROM usr
-> WHERE uname = '山田祥寛'\G
以下の通り、表示されれば、成功である。
mysql> EXPLAIN SELECT uname FROM usr
-> WHERE uname = '山田祥寛'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: usr
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 8
filtered: 12.50
Extra: Using where
1 row in set, 1 warning (0.00 sec)
「key: NULL」と表示されている。
インデックスを作成しよう
usrテーブルのunameフィールドに対してインデックスを作成しよう。
以下の通り、入力しよう。
mysql> CREATE INDEX idx_usr ON usr (uname);
以下の通り、表示されれば、成功である。
mysql> CREATE INDEX idx_usr ON usr (uname);
Query OK, 0 rows affected (0.15 sec)
Records: 0 Duplicates: 0 Warnings: 0
SELECT 命令の状況を確認しよう
インデックスを設置した状態でSELECT 命令を実行した場合、どれだけ手間がかかるのか確認する。
以下の通り、入力しよう。
mysql> EXPLAIN SELECT uname FROM usr
-> WHERE uname = '山田祥寛'\G
以下の通り、表示されれば、成功である。
mysql> EXPLAIN SELECT uname FROM usr
-> WHERE uname = '山田祥寛'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: usr
partitions: NULL
type: ref
possible_keys: idx_usr
key: idx_usr
key_len: 62
ref: const
rows: 1
filtered: 100.00
Extra: Using index
1 row in set, 1 warning (0.01 sec)
「key: idx_usr」と表示されている。
インデックスを削除しよう
それでは、作成したインデックスを削除しよう。
以下の通り、入力しよう。
mysql> DROP INDEX idx_usr ON usr;
以下の通り、表示されれば、成功である。
mysql> DROP INDEX idx_usr ON usr;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
今回は、ここまでである。mysqlクライアントを終了しよう。
mysql> exit
Bye
PS C:\Users\vinta>
(参考)3ステップでしっかり学ぶ MySQL入門 [改訂第3版] 山田奈美(著)山田祥寛(監修)技術評論社
コメント