fast-je
@fast-je
Пишу на php.

Как заставить работать индекс при запросе?

Всем привет!
Есть таблица в которой есть поле date и там INT и оно index.
Но при EXPLAIN показывает что index не используется.
Я подумал, ну наверное проблема с типами и сделал convert to SIGNED UNIX_TIMESTAMP(), но что-то не особо помогает, что-то делают я не так.

5e6c054963695311726749.png

Еще у меня было так
SELECT * FROM `still_youtube_ads_user` WHERE `date`+12313123 < CONVERT(UNIX_TIMESTAMP(), SIGNED)


Не уверен что с + будет работать.
Как заставить работать индекс ?
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
fast-je
@fast-je Автор вопроса
Пишу на php.
Rsa97, Спасибо за ответ, вы очень помогли.

Ответ.
Разница в том, что по полю `date` индекс у вас есть, а по выражению `date`+23328000 индекса нет и быть не может.

Чаще всего MySQL не ошибается.
В вашем случае ожидается, что под условие `date` < CONVERT(UNIX_TIMESTAMP(), SIGNED) попадёт 50% строк, а значит проще перебрать все строки, чем читать в одном месте индекс, в другом строки, на которые он ссылается.

Индекс работает когда:
1. В левой части условия находится чистое поле, а не выражение или функция от поля.
2. Есть подходящий индекс. Если условий несколько, то может использоваться составной индекс, имеющий подходящий префикс.
3. MySQL считает, что использование индекса затратит меньше ресурсов, чем прямое сканирование.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
https://dev.mysql.com/doc/refman/8.0/en/index-hint...
В вашел случае это не поможет так как выборка не маленькая указывайте меньшими ренжами , ни кто в здравом уме не выбирает пол милиона записей

mysql в вашем запросе выборку с индексом прировнял к полному сканированию таблицы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Blogman Санкт-Петербург
от 90 000 до 160 000 ₽
Ortnec Services Ltd Лимассол
от 300 000 ₽
30 мар. 2020, в 10:09
500 руб./в час
30 мар. 2020, в 09:48
120000 руб./за проект
30 мар. 2020, в 09:33
10000 руб./за проект