представления, основанные на представлении, являются медленными - PullRequest
1 голос
/ 16 ноября 2011

Я создал представления для базы данных SQL Server 2005, и это представление основано на представлениях, предоставленных третьей стороной. Я показываю их в нашем приложении через соединение JDBC, и они, кажется, очень медленно. Я попробовал другой метод и создал их в виде таблицы с помощью команды SQL (select into), в этом случае просмотр данных в приложении выполняется быстро. Можете ли вы сообщить мне, пожалуйста, о лучшем подходе.

Как улучшить производительность приложения?

  1. Индексированное представление.
  2. Используйте SSIS, чтобы добавить их в нашу базу данных, которая также является SQL Server 2008 R2.
  3. Что еще?

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

Лучший способ найти способ повысить производительность запросов (включая представления) - взглянуть на сгенерированные планы запросов, создаваемые SSMS.Первое, что я ищу, - это сканирование индекса или таблицы.Когда вы видите что-либо из этого, есть хороший шанс, что индекс необходим, и часто вам нужно ВКЛЮЧИТЬ столбцы в индексе, чтобы индекс действительно использовался.

Индексированные представления могут дать огромныйповышение производительности.Однако Microsoft наложила на них так много ограничений, что зачастую их очень трудно использовать.Они также влияют на производительность вставки / обновления / удаления в базовых таблицах.Таким образом, существует компромисс.

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

1 голос
/ 16 ноября 2011

Вы должны понимать, где медлительность является первой.

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

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

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

0 голосов
/ 16 ноября 2011

Как я могу улучшить производительность приложения?

  1. Индексированное представление.
  2. Используйте SSIS, чтобы получить их в нашей базе данных, которая также является SQL Server 2008 R2.
  3. Что еще?

Еще одна опция, не упомянутая -

Не использовать представления

Мой опытв том, что неиндексированные представления обычно замедляют работу, а индексированные представления трудно создавать из-за ограничений.

Если вы столкнулись с некоторой проблемой, когда вам кажется, что вам нужно использовать View, попробуйте вместо этого использовать CTE или встроенное представление.

...