selectでwhereを使うときに早くなるのはわかるのだが、仕組みがよくわからない。
add indexでindexを追加する、ということで
mysql> describe items;
+———+———+——+—–+———+—————-+
| Field   | Type    | Null | Key | Default | Extra          |
+———+———+——+—–+———+—————-+
| item_id | int(11) | NO   | PRI | NULL    | auto_increment |
| name    | text    | YES  |     | NULL    |                |
| price   | int(11) | YES  |     | NULL    |                |
+———+———+——+—–+———+—————-+
3 rows in set (0.00 sec)
mysql> alter table items add index idx_hoge(name(5));
Query OK, 0 rows affected (0.49 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> describe items;
+———+———+——+—–+———+—————-+
| Field   | Type    | Null | Key | Default | Extra          |
+———+———+——+—–+———+—————-+
| item_id | int(11) | NO   | PRI | NULL    | auto_increment |
| name    | text    | YES  | MUL | NULL    |                |
| price   | int(11) | YES  |     | NULL    |                |
+———+———+——+—–+———+—————-+
3 rows in set (0.00 sec)
mysql> explain select * from items;
+—-+————-+——-+——+—————+——+———+——+——+——-+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra |
+—-+————-+——-+——+—————+——+———+——+——+——-+
|  1 | SIMPLE      | items | ALL  | NULL          | NULL | NULL    | NULL |    3 | NULL  |
+—-+————-+——-+——+—————+——+———+——+——+——-+
1 row in set (0.00 sec)
あれ?
>INDEXを作成すると、データテーブルとは別に検索用に最適化された状態でデータが保存
データ型そのものを変えるとは違う? どういうことだ?
>基本的にはデータ構造に対してというより
>そのテーブルに走るSQLに対応してINDEXは設定します。
データ構造は変わらない。つまり、indexを張った後も、
mysql> describe items;
+———+———+——+—–+———+—————-+
| Field   | Type    | Null | Key | Default | Extra          |
+———+———+——+—–+———+—————-+
| item_id | int(11) | NO   | PRI | NULL    | auto_increment |
| name    | text    | YES  | MUL | NULL    |                |
| price   | int(11) | YES  |     | NULL    |                |
+———+———+——+—–+———+—————-+
3 rows in set (0.00 sec)
name のkeyがmulになっているが。。
mysql> explain select name from hogehoge where hoge > 20000;
+—-+————-+———-+——+—————+——+———+——+——+————-+
| id | select_type | table    | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+—-+————-+———-+——+—————+——+———+——+——+————-+
|  1 | SIMPLE      | hoge | ALL  | NULL          | NULL | NULL    | NULL |   67 | Using where |
+—-+————-+———-+——+—————+——+———+——+——+————-+
1 row in set (0.00 sec)
んん、なんか全然意味が分からない。
とりえあずindexはカラムに対して貼るってことはわかった。