У меня очень странная проблема с MySQL и простой запрос с простым индексом. Я пытаюсь использовать этот запрос:
SELECT * FROM `counter_links` WHERE `link_id`=1544;
Как вы можете видеть, есть также индекс с именем link_id:
mysql> show indexes from counter_links;
+---------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----------+---------------+
| counter_links | 1 | link_id | 1 | link_id | A | NULL | NULL | NULL | | BTREE | disabled | |
+---------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+----------+---------------+
1 row in set (0.12 sec)
Но посмотрите, что EXPLAIN вернул:
mysql> explain SELECT * FROM `counter_links` WHERE `link_id`=1544;
+----+-------------+---------------+------+---------------+------+---------+------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+------+---------------+------+---------+------+----------+-------------+
| 1 | SIMPLE | counter_links | ALL | NULL | NULL | NULL | NULL | 22103687 | Using where |
+----+-------------+---------------+------+---------------+------+---------+------+----------+-------------+
1 row in set (0.03 sec)
Почему mySQL там не использует индекс? Я вижу, что то же самое хорошо работает с уменьшенной версией таблицы, но я не могу понять, в чем проблема. Вы делаете?
Это более странно, чем кажется, потому что более низкие идентификаторы иногда работают с индексом.
Спасибо за все комментарии заранее!
ура!
Якуб