MySQL не использует индексы в запросе
Запрос SELECT * FROM surv_tokens WHERE token=1111111111;
Индекс на token создан
В token уникальное числовое целое значение всегда без NA
В surv_tokens более 10 млн записей
ответ explain:
id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, SIMPLE, surv_tokens_27648, ALL, idx_surv_tokens_token, NULL, NULL, NULL, 10316268, "Using where"
key= null
possible_keys
видит, но не использует.
Почему?
key_buffer_size = 268435456
Размер таблицы 2Гб
index length таблицы 975 Мб
Пробовал уникальный и не уникальный индекс. И не надо говорить, что движок базы данных считает использования индекса неэффективным. Запрос выполняется 2 секунды, количество запросов иногда десятки в секунду. Использование индекса тут будет чертовски эффективным.
Ответы (1 шт):
Автор решения: Mike
→ Ссылка
Ответ оказался очень прост. Вместо
SELECT * FROM surv_tokens WHERE token=1111111111;
нужен запрос
SELECT * FROM surv_tokens WHERE token="1111111111";
тогда ключ используется.