parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Эй! Спецы по MySQL! помогите соптимайзить запрос!

Misha v.3 27.02.2003 21:32

:)
итак, прикрутил к sql.p статистику по подсчету времени выполнения запросов (спасибо Nexus-у) и взглянув на один из запросов в данном форуме несколько офигел :)

запрос:
SELECT MAX(dt_published) FROM forum_message WHERE forum_id = 1 AND is_published = 1
результаты explain:
table	type	possible_keys	key	key_len	ref	rows	Extra
forum_message	ALL	ix_message_0,ix_forum_id	13875	where used
время выполнения > 100 ms :(
индексы есть по forum_id, is_published, dt_published

для примера... все запросы в форуме выполняются 350 ms (т.е. этот запрос - треть всего времени). учитывая тот факт, что этот запрос нужен лишь для того, чтобы показать максимальные даты для фильтра по датам я загрустил.

почему этот запрос работает долго тоже понятно: большинство сообщений имеет is_published = 1 и forum_id = 1, поэтому индексы фактически не используются.

в то-же самое время, если убрать из запроса WHERE, то он выполняется мгновенно (0.887 ms) т.к. сервер просто берет это максимальное значение и все.

в рамках данного форума я действительно могу просто выкинуть WHERE, или в качестве максимальной даты использовать результат ^date::now[], но в общем случае эту задачу мне очень хотелось-бы решить... создание составного индекса может и поможет решить эту проблему, только я не знаю как...

сделать индекс из datetime и int... и что он будет выбирать по max? в общем буду экспериментировать, а если у кого есть мысли - давайте их сюда ;)

  • Эй! Спецы по MySQL! помогите соптимайзить запрос!, Misha v.3 [M] 27.02.2003 21:32