Я разрабатываю приложение о математических вопросах и ответах. Для каждого члена есть история вопросов.
Для простоты таблица вопросов выглядит примерно так:
question_idx(int,PK) | subject(varchar) | level(varchar) | reg_date(datetime,INDEX)
Я хочу выбрать вопрос менее 6 месяцев назад. Запрос:
SELECT * FROM QUESTION WHERE reg_date >= NOW() - 6 MONTH;
Этот запрос лучше всего оптимизирован?
Это больше похоже на проверку кода
Что вам говорит план выполнения запроса?
объяснить сказал 'используя где'
Если вы хотите выбрать все столбцы из таблицы, то, скорее всего, вы не сможете улучшить этот запрос. Ваш запрос доступен для анализа, и ваша таблица индексируется по единственному предикату. Всегда лучше указывать столбцы, которые вы хотите выбрать явно. Независимо от того, могут ли изменения в инфраструктуре или структуре данных улучшить ситуацию, требуется огромное количество дополнительной информации о вашей среде.
Можете ли вы показать фактический полный вывод EXPLAIN? Одной из возможных причин отсутствия «Использование индекса» в плане запроса может быть то, что большинство строк в любом случае были созданы менее шести месяцев назад. Эвристика для этого примерно такова: если по оценкам оптимизатора совпадают более двух третей строк, быстрее выполнить линейное сканирование таблицы вместо чтения строк в индексном порядке, что вызвало бы случайный ввод-вывод...
Сколько времени занимает запрос? Как часто вы будете выполнять запрос? Другими словами, зачем вам нужен оптимизированный запрос это?
Мой вопрос: этот запрос работает как ожидаемый результат?