2015-12-18 7 views
0

Я хотел бы знать, есть ли какое-то преимущество в производительности, связанное с использованием представлений каталога DBA_ над представлениями ALL_ для запроса метаданных базы данных и в каких ситуациях (если они есть) это преимущество проявилось бы.DBA vs ALL views performance

+1

протестируйте его и посмотрите сами, но в документах мы показываем, что представления DBA_ бывают быстрее - использование всех видов включает проверку, чтобы увидеть, к чему у вас есть доступ, это дополнительный шаг. – thatjeffsmith

ответ

0

Словарь Oracle медленный, поэтому общее эмпирическое правило: не использовать словарь в критическом критически важном коде. Если вам очень нужны метаданные в вашем приложении, вы можете создать материализованное представление на основе словарных таблиц и обновить его вручную после выполнения DDL. Конечно, не все изменения в словаре сделаны пользователем DDL, но я не знаю, какие именно мясные рецепты вам нужны.

Что касается различий в просмотрах ALL_ и DBA_, я считаю, что это маргинально. По очевидным причинам, DBA_ просмотров больше, чем ALL_ просмотров. В каждом случае вы можете попытаться получить DDL для них, используя пакет DBMS_METADATA.

select dbms_metadata.get_ddl('VIEW', 'ALL_TABLES', 'SYS') 
from dual 

Я не буду прикреплять выходные данные, так как это довольно многословно и бесполезно. В случае ALL_TABLES список таблиц, используемых в FROM, тот же. Поскольку вы получаете доступ к тем же данным, выполняете те же соединения и просто фильтруете строки по-разному, по производительности результат должен быть примерно одинаковым.