Итак, у меня следующий запрос:
EXPLAIN
SELECT
id,
name,
title,
description,
time
FROM entity
WHERE
(date_end > CURRENT_DATE
OR (date_end = CURRENT_DATE AND time_end >= CURRENT_TIME)
)
AND (next_date < CURRENT_DATE
OR (next_date = CURRENT_DATE AND next_time <= CURRENT_TIME)
)
По какой-то причине mysql не использует индекс, который я создал (next_date, date_end) для обработки этого запроса.
Когда яdo:
EXPLAIN SELECT id, name, title, description, time FROM entity WHERE (date_end = CURRENT_DATE AND time_end >= CURRENT_TIME)
Используется индекс, который я создал (date_end)
Кажется, проблема в запросе - это часть date_end> CURRENT_DATE и next_call
Я пытался использовать USE INDEX
и FORCE INDEX
, но результат тот же - индексы не используются.я также попробовал ANALYZE TABLE
.
Моя табличная сущность представляет собой таблицу INNODB с первичным ключом для идентификатора и индексами для date_end, next_date и (next_date, date_end).