Итак, вот очень простая таблица 'tbl':
+---------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+----------------+
| val | varchar(45) | YES | MUL | NULL | |
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
+---------+---------------------+------+-----+---------+----------------+
И индексы для нее:
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| tbl | 0 | PRIMARY | 1 | id | A | 201826018 | NULL | NULL | | BTREE | |
| tbl | 1 | val | 1 | val | A | 881336 | NULL | NULL | YES | BTREE | |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
Я пробую этот простой выбор:
select val from tbl where val = 'iii';
результат: 86208 строк в наборе (0,08 сек)
Но когда я хочу немного изменить его:
select id, val from tbl where val = 'iii';
результат: 86208 строк в наборе (47,30 сек)
У меня есть индекс прямо на coumn, где указывает, все, что я изменяю, является представлением строк результата. Почему такая страшная задержка? (Должен сказать, что я не могу воспроизвести эту задержку каждый раз, когда захочу: даже после «сброса кеша запросов» или установки команды «query_cache_type=off» это можно сделать быстро).