0 / 0 / 0
Регистрация: 29.01.2018
Сообщений: 10
|
|
1 | |
Оптимизация запроса09.04.2018, 08:36. Показов 889. Ответов 2
Метки нет (Все метки)
Добрый день, есть вот такой запрос:
select id, content, vote from table1 where DATE_FORMAT(date, '%Y-%m') = ? order by vote desc limit ?, 20 За месяц получается набирается около 600 записей, date проиндексировано. Запрос занимает 0.5 . Можно ли сделать быстрее?
0
|
09.04.2018, 08:36 | |
Ответы с готовыми решениями:
2
Оптимизация запроса Оптимизация запроса Оптимизация запроса Оптимизация запроса |
476 / 239 / 114
Регистрация: 12.05.2016
Сообщений: 647
|
|
12.04.2018, 00:30 | 2 |
Сообщение было отмечено Recontrans как решение
Решение
Вариант №1: Сделать индекс на date. Равенство заменить на BETWEEN между началом и концом месяца. Будет range scan по индексу.
Вариант №2: Сделать отдельное поле с месяцем (можно даже числовое типа 201801) по нему индекс и равенство (однако данное решение менее гибкое, если данные не обязательно за месяц выбираются. Вариант №3: Начиная с версии 5.7.6 можно вариант 2 автоматизировать, добавив автогенерируемое поле равное DATE_FORMAT(date, '%Y-%m') и индекс по нему. Я бы реализовал первый вариант, как самый гибкий, позволяющий налагать условия на произвольный диапазон дат P.S: В более продвинутых базах, к коим MySQL не относится - есть еще одно элегантное решение в виде функциональных индексов.
1
|
0 / 0 / 0
Регистрация: 29.01.2018
Сообщений: 10
|
|
12.04.2018, 10:06 [ТС] | 3 |
Спасибо за подробный ответ,я думал у меня запрос с индексацией а оказалось нет, всё из-за date_format
0
|
12.04.2018, 10:06 | |
12.04.2018, 10:06 | |
Помогаю со студенческими работами здесь
3
Оптимизация запроса оптимизация запроса Оптимизация запроса Оптимизация запроса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |