2013-07-08 4 views
0

У меня есть представление, на выполнение которого требуется 20 секунд, где тот же самый SQL-запрос, что и собственный запрос, занимает меньше секунды. Кто-нибудь знает причину этого или что я могу сделать, чтобы ускорить представление?Просмотр занимает больше времени, чем запрос

Это довольно простой взгляд, содержащий около 7 левых партий и несколько «наибольших n на группу» вложенных запросов. например

select t.id, t.rev, t.contents 
from MyTable t 
inner join(
    select id, max(rev) rev 
    from MyTable 
    group by id 
) in on t.id = in.id and t.rev = in.rev 

ответ

4

Вы можете ускорить и замену агрегации и присоединиться к функции окна:

select t.id, t.rev, t.contents 
from (select t.id, t.rev, t.contents, MAX(rev) over (partition by id) as maxrev 
     from MyTable t 
    ) t 
where t.rev = t.maxrev; 

Причина разницы в производительности между представлением и запросом, вероятно, из-за компиляции. Представление скомпилировано (и оптимизировано) при первом запуске. С тех пор данные могут быть изменены или способ, которым вы его используете, может измениться. Вы можете перекомпилировать представление, если данные изменились для лучшего плана выполнения.

Смежные вопросы