Ответ
Misha v.3 11.09.2007 15:42
Все индексы стоят правильно (вроде). Эксплеин тоже ровный.
и правильные индексы не стоят и explain сразу говорит, что хреново дело.
- int(10) != int(11)
- читайте про составные индексы. group_id_2 -- очень невыгодный, т.к. по первому-же полю ничего не отсекается, поэтому он не используется (спорим у вас новостей в будущем 2 с половиной штуки, да и то по праздникам?)
- type = ALL для article -- отстой. Using temporary; Using filesort - второй отстой. вам надо избавиться от первого (от второго не избавитесь). с другой стороны там всего 4682 записей... это запрос не на 170 секунд.
- посмотрите на ваши календари. вам не нужен такой запрос, как вы пишите. у вас их два: 1 -- за текущий месяц (т.е. надо отчильтровать WHERE dt_published >= 'начало месяца') и группировать по YMD, второй -- группировать по YM, D тут нафиг не нужен. ваш запрос достаёт много ненужных данных (- время теряется на передачу)