Повышение производительности запросов с помощью представлений - PullRequest
3 голосов
/ 14 сентября 2010

У меня есть большая таблица с 10+ миллионами записей в базе данных SQL Server. Таблица содержит данные определенного типа для всех 50 штатов США. Итак, если я создам 50 представлений, по одному для каждого состояния, из этой таблицы, улучшится ли производительность выполнения запросов из моего приложения? Другие предложения?

Ответы [ 6 ]

8 голосов
/ 14 сентября 2010

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

Если только он не проиндексирован.50 индексированных представлений, скорее всего, излишне.

Если у вас низкая производительность с 50 миллионами строк (на самом деле это не так уж и много), тогда это проблема индексации.

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

Для начала я бы использовал dmv запрос взвешенного отсутствующего индекса , чтобы увидеть, где вы получаете максимальную отдачу от вашего доллара

2 голосов
/ 14 сентября 2010

Обычные (неиндексированные) представления не могут повысить производительность - их можно рассматривать как «короткие строки» или «псевдонимы» для запросов SELECT, поскольку они не имеют физической структуры под ними.

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

Вам нужно создать соответствующие индексы на вашей таблице и, возможно, изменить дизайн таблицы (например, разделить ее на несколькотаблицы).

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

0 голосов
/ 15 сентября 2010

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

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

0 голосов
/ 14 сентября 2010

Одно простое предложение:

use [YourDataBase]
select * from sys.dm_db_missing_index_details as ddmid
0 голосов
/ 14 сентября 2010

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

0 голосов
/ 14 сентября 2010

Вы на правильном пути:

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

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