Akuma
@Akuma
Веб-программист

Почему доктрина строит такие сложны запросы для получения количества элементов?

Всем привет,

есть проект на 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 проектами), что запрос так долго обрабатывается?
  • Вопрос задан
  • 2570 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Nc_Soft
Надо избавиться от DISTINCT и подзапроса.
Ответ написан
@d1gi
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы