Задать вопрос
@likilix
Лицемер

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

В каком направлении идти, чтобы локализовать проблему так сказать

-- Работает очень быстро 
       SELECT 
           t0.rsk_id
          ,t0.owner_id
          ,SUM( t0.qty ) AS qty 
          ,SUM( t0.is_marriage ) AS qty_marriage
          ,SUM( t0.is_loading ) AS qty_loading
          ,SUM( t0.is_balance ) AS qty_balance
          ,t0.track_number
       FROM 
           t_report_detail t0 
       GROUP BY
           t0.rsk_id
          ,t0.owner_id, t0.track_number

-- Работает медленно.
-- Запрос, что находится выше я поместил внутрь запроса, и скорость выполнения зароса упала почти в 5 - 6  раз с 400 мс  до 3 секунд.


     SELECT 
           t0.rsk_id
          ,t0.owner_id
          ,t0.qty 
          ,t0.qty_marriage
          ,t0.qty_loading
          ,t0.qty_balance
          ,t0.track_number
      FROM (
       SELECT 
           t0.rsk_id
          ,t0.owner_id
          ,SUM( t0.qty ) AS qty 
          ,SUM( t0.is_marriage ) AS qty_marriage
          ,SUM( t0.is_loading ) AS qty_loading
          ,SUM( t0.is_balance ) AS qty_balance
          ,t0.track_number
       FROM 
           t_report_detail t0 
       GROUP BY
           t0.rsk_id
          ,t0.owner_id, t0.track_number) t0;
  • Вопрос задан
  • 91 просмотр
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
1. Отсутствие индексов на всех выводимых, группируемых, участвующих в условиях выборки полях.
2. t_report_detail не таблица, а вью. Не каждая вью адекватно приготовлена, чтобы над ней можно было легко делать еще какую-либо агрегацию. Пишите другую вью на основе ее текста запроса или изменяйте принцип получения агрегированных данных, чтобы не было узских мест.
PS: explain analyze - это ваши очки. Администратор СУБД слеп без него.
PPS: Если работаете в Toad, то простой запуск запроса в редакторе не всегда адекватен при измерении времени. Так как он получает только первые 500 записей. Поэтому, если запрос усложнить, то план выполнения может резко поменяться с учетом получения 500 записей на конечном этапе.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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