2013-09-07 3 views
2

Это упрощенная версия двух видов:производительности в двух SQL запросов

viewA is select * from myTable; 
viewB is select * from viewA; 

Есть ли разница в производительности между выбором из viewA непосредственно и выбрав из viewB, потому что выбор из viewB имеет еще один слой, который viewA?

+0

Запустите «объясните план» для двух запросов и сравните результат. – Glenn

+0

Я не знаю, ответ. Но вполне возможно, что они будут вести себя по-разному при определенных обстоятельствах. Скомпилировано представление, и эта скомпилированная форма доступна для запроса. Это может привести к тому, что другой план выполнения будет компилировать код непосредственно в запрос. –

+0

Планировщик запросов * должен * быть достаточно умным, чтобы «сшить все вместе» (т. Е. Перепланировать весь запрос в полном контексте, если сочтет это необходимым), но только просмотр фактического плана скажет «наверняка». Там могут быть гремлины с кэшированными планами и еще что-то - иногда на SQL Server, так или иначе:> – user2246674

ответ

3
CREATE OR REPLACE FORCE VIEW "VIEWA" ("TITLE", "VALUE1", "VALUE2", "ID") AS 
    select "TITLE","VALUE1","VALUE2","ID" from dati 
/
​CREATE OR REPLACE FORCE VIEW "VIEWB" ("TITLE", "VALUE1", "VALUE2", "ID") AS 
    select "TITLE","VALUE1","VALUE2","ID" from viewa 
/

Объяснить план для выбора * от viewA

Operation   Options   Object Rows Time Cost Bytes Filter   Access 
                      Predicates * Predicates 
SELECT STATEMENT       4  1  3  268  
TABLE ACCESS  STORAGE FULL DATI 4  1  3  268  

Объяснить план для выбора * от viewB

Operation   Options   Object Rows Time Cost Bytes Filter   Access 
                      Predicates * Predicates 
SELECT STATEMENT       4  1  3  268  
TABLE ACCESS  STORAGE FULL DATI 4  1  3  268 

Мой ответ должен быть: нет, нет никакой производительности разница.

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