Оптимизация запроса в MySql





Есть запрос
SELECT COUNT(*) as RecordsCount
 FROM `list`
LEFT JOIN `Customers`
 ON `list`.`customer_id`=`Customers`.`CustomerId`
WHERE (`list`.`begin_date` <= '2009-04-20 14:33:58')
 AND (`list`.`end_date` >= '2009-04-20 14:33:58')
 AND (еще условие)
В таблице list есть индекса по begin_date, end_date и составной сразу по обоим. Тип ключей Btree. Тип таблиц InnoDB.
При выполнении запроса индексы в таблице list не используются вообще , хотя среди допустимых перечислены все.

Но в запросе
SELECT COUNT(*)  AS BlackRecordsCount
FROM `list`
WHERE
(`end_date` <= '2009-04-20 14:33:58')
AND (`begin_date` >= '2009-04-20 14:33:58')
все как положено - состовной индекс задействован.
Что делать?? Как заставить использовать индекс?
  • 23 июля 2009, 13:02
  • io-o

Ответы (3)

RSS
+
0
Напиши после имени таблицы перед скобкой (index [имя индекса]) - тоесть явно укажи... или надо в конец запроса дописать псевдоусловия, но если ты его укажешь явно он должен взяться полюбом...
avatar

ast25

  • 27 июля 2009, 02:21
+
0
вопрос о среде под какими базами?
avatar

obj-ihail

  • 31 июля 2009, 17:33
+
0
возможно, дополнительное условие ограничивает диапазон затрагиваемых строк и БД ищет сначала по нему, а уже потом по датам.
в качестве шаманского бубна попробуйте убрать уточнение `list`. если в Customers у вас нет таких полей
avatar

ar-axx

  • 24 июля 2009, 08:28

Только зарегистрированные и авторизованные пользователи могут отвечать.