2011-01-07 4 views
8

Сценарий:Является ли запрос более медленным, чем выполнение SQL напрямую?

У меня есть 3 таблицы, которые необходимо объединить, предложение where, чтобы ограничить набор результатов, и только несколько столбцов из каждой выбранной таблицы. Просто. Тем не менее, запрос сделать это не очень красиво, и при использовании ORM между базой данных и приложением, это похоже на попытку поставить квадратную привязку в круглое отверстие.

Мой способ обойти это, чтобы создать представление, которое охватывает запрос, и теперь моя модель приложения отображает непосредственно представление в базе данных; не более сумасшедшее отображение слоя ORM.

Вопрос: Предполагая, что здесь нет других факторов, будет ли запрос против представления подвергать любые дополнительные штрафы за производительность, которые я бы не ударил, если бы я выполнил инструкцию SQL напрямую? - Это не индексированный вид, предполагающий то же самое, что и предложение, сохраняйте это просто.

Меня убеждают в том, что вид страдает от дополнительных накладных расходов на «создание». Мое понимание состоит в том, что при всем остальном одно и то же, два должны иметь идентичную производительность.

Просьба уточнить. Благодаря!

+1

Зависит от базы данных и многих других вещей. Если это MySQL, ответ: Да, это медленнее. – nos

ответ

4

Из MSDN: View resolution

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

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

Сохранено только определение неиндексированного представления, а не строки представления. Оптимизатор запросов включает логику из определения представления в план выполнения, который он создает для оператора SQL, который ссылается на неиндексированное представление.

+0

Пока представление было выполнено до того, как не будет никакой разницы. Фактически, представление может быть немного быстрее, поскольку оно может иметь план кеширования запросов. – Matthew

3

В Oracle производительность одинакова. Представление действительно является именованным оператором sql. Но любитель.

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

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