Будет ли увеличить производительность представления? - PullRequest
3 голосов
/ 11 мая 2009

У меня есть шесть таблиц, которые будут объединяться во многих запросах. Если представление, созданное путем объединения всех таблиц, увеличит производительность? Я использую оракул в качестве базы данных, и все объединенные столбцы проиндексированы.

Ответы [ 4 ]

7 голосов
/ 11 мая 2009

Представление само по себе не увеличит производительность. С учетом вышесказанного, в зависимости от того, какой механизм базы данных вы используете, есть вещи, которые вы можете сделать с представлением.

В SQL Server вы можете поместить индекс в представление (при условии, что представление соответствует различным требованиям). Это может значительно улучшить производительность.

Какую СУБД вы используете?

Редактировать

В Oracle вы можете создать Материализованное Представление. Вот ссылка, с которой вы должны начать. Я не знаю Oracle, поэтому я могу предоставлять только ссылки.

http://searchoracle.techtarget.com/expert/KnowledgebaseAnswer/0,289625,sid41_gci909605,00.html

4 голосов
/ 11 мая 2009

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

Добавление представления может повысить производительность, если оно проиндексировано, или может снизить производительность, если это не так. Многое зависит от вашей базы данных и фактического запроса, на котором основано представление. Однажды вещь, которую сделает представление, гарантирует, что каждый, кто использует, смотрит на те же самые шесть таблиц. Это плюс или минус в зависимости от запроса (не все запросы, основанные на представлении, могут фактически нуждаться во всех шести таблицах).

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

3 голосов
/ 11 мая 2009

Следует отметить, как работают представления: они запускают запрос представления во время выполнения. Они не предварительно кэшируются, поэтому без индексов они по сути являются вызовами функций.

Для повышения производительности интенсивно используйте индексы в своих таблицах и представлениях. Не стреляйте из них, но хорошо разработанные индексы могут быть днем ​​и ночью для вашей производительности.

0 голосов
/ 11 мая 2009

Это также зависит от базы данных. Если RDMS не анализирует базовый запрос на основе ваших критериев, он может не работать вообще.

Большинство современных RDMS будут переписывать запросы (я думаю, что некоторые более ранние версии SQL Server, такие как 6 или 7, не делали этого), они разбирают представление в свете вашего запроса, а затем переписывают все на основе на его методы оптимизации.

Различные итерации запросов с использованием представления могут кэшировать свои планы и таким образом повышать производительность.

Итак, насколько я понимаю, по крайней мере в теории (в зависимости от оптимизатора базы данных) использование представлений не отличается от написания всего запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...