Значительная задержка при создании View (Viewed Table) на SQL сервере - PullRequest
1 голос
/ 24 января 2020

У меня есть несколько данных о персонале таблиц в базе данных в SQL Server 2014. Существует представление, которое выбирает выбранные данные из этих таблиц путем реализации нескольких объединений.

Одним из условий выбора строки является ее столбец n isActive = 1 в таблице NominalRoll. В SQL Server Reporting Server есть отчет, который вызывает это представление и отображает PDF.

До сих пор в таблице NominalRoll было 1 миллион строк, из которых 75% имели isActive = 1. Генерация отчета занимала до 1 минуты для отображения.

В последнее время из-за некоторых требований столбец isActive был обновлен, и теперь только 5% строк имеют isActive = 1. Как ни странно, с тех пор отчет занимает до 4 минут для отображения, даже если количество отображаемых строк значительно уменьшилось.

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

1 Ответ

0 голосов
/ 24 января 2020

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

Здесь можно попробовать несколько вещей:

  1. Материализовать представление, создав для него индекс - данные представления будут автоматически обновляться при изменении базовых данных и он действует как таблица (поэтому, похоже, что вы выполняете SELECT из обычной таблицы SQL). Обратите внимание, что многие материалы не поддерживаются в индексированных представлениях.
  2. Вы выбираете только 5% фильтрации строк по isActive=1 - это хороший выбор для создания индекс фильтра . Это поможет движку лучше оценить данные, с которыми он будет работать.

Вышеуказанные изменения требуют немного больше работы и требуют операций DDL. Если вам не разрешено изменять схему, вы можете поделиться определением представления, чтобы получить некоторую помощь по оптимизации T- SQL. На самом деле, всегда лучше начать с оптимизации T- SQL, прежде чем переходить к изменениям DDL.

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