Сервер БД выдвигает предикаты, чтобы подчеркнуть запрос представления, если мы делаем запрос на представлении с предикатами? - PullRequest
0 голосов
/ 08 января 2019

Я использую MySQL, и у меня сложное представление, которое вызывает проблемы с производительностью.

Определение view_3

select * from view_1 union select * from view_2

Теперь, когда я запускаю запрос к view_3, как показано ниже

select * from view_3 where clolumn_a=value;

При обработке большого набора строк может выполняться полное сканирование таблицы, а затем возвращаться результат.

Так что было бы лучше сделать запрос, как показано ниже

select * from view_1 where column_a=value union select * from view_2 where column_a=value;

Будет ли такое поведение обработки представления оставаться таким же на других серверах SQL, таких как Oracle, MSSQL

Будут ли предикаты выдвинуты для подчеркивания запроса представления?

1 Ответ

0 голосов
/ 08 января 2019

Да, представление похоже на «Макрос» из некоторых других языков. Определение представления «раскрывается» в запросе, который его использует, а затем весь запрос (теперь просто составленный из доступа к реальным базовым таблицам, без представлений) оптимизируется в целом.

Предполагая, что оптимизатор выполняет свою работу правильно, он должен быть в состоянии оттолкнуть любые предикаты "вниз" - возможно, выбрав использование поиска по индексу, а не сканирования таблицы, если доступны соответствующие индексы, которые соответствуют вашим предикатам.

Если вы хотите точно узнать, что оптимизатор сделал с вашим запросом, узнайте, как получить и прочитать планы выполнения. В это будет сделано через EXPLAIN.

...