Всем привет,
есть проект на Symfony2. ORM - Doctrine2.
Используется расширение
Loggable для ведения лога изменений объектов.
В табличке с логами сейчас около 700 000 записей. В админке эти записи постранично выводятся использованием стандартного пагинатора доктрины.
Заметил, что доктрина для получения количества записей строит вот такой запрос:
SELECT COUNT(*) AS dctrn_count
FROM (
SELECT DISTINCT id0
FROM (
SELECT k0_.id AS id0,
k0_.action AS action1,
k0_.logged_at AS logged_at2,
k0_.object_id AS object_id3,
k0_.object_class AS object_class4,
k0_.version AS version5,
k0_.data AS data6,
k0_.username AS username7
FROM ext_log_entries k0_
WHERE
k0_.object_class NOT IN ('Class1', 'Class2')
ORDER BY k0_.logged_at DESC
)
dctrn_result
) dctrn_table
Индексы на месте. Вручную пробовал убирать WHERE и ORDER - не помогает. Запрос выполняется около 20 секунд, что, мягко говоря, дофига.
Подскажите, в какую сторону копать? Доктрина неправильно строит запросы, или это косяк сервера, (выделенный Xeon E3-1240 16GB RAM с 4 проектами), что запрос так долго обрабатывается?