Альтернативная таблица в реальном времени и таблица обмена

Я использую SSMS 2016. У меня есть представление с несколькими миллионами записей. Представление не индексируется и не должно выполняться, поскольку оно обновляется (вставляется, удаляется, обновляется) каждые 5 минут заданием на сервере, чтобы затем отображать наборы данных обновления в клиентском вызывающем приложении в графическом интерфейсе.

Представление выполняет очень большой объем преобразования значений INT в VARCHAR, добавляя к ним некоторые строковые значения.

Представление также выполняет некоторые операции CAST с NULL, присваивая им псевдонимы имен столбцов. И худшее снижение производительности заключается в том, что представление использует функцию FOR XML PATH('') для 20 столбцов.

Кроме того, представление использует два CTE в качестве источника, а также дочерние компании для определения значения одного столбца.

Я удостоверился, что создал правильные индексы (Clustered, некластеризованные, составные и Covering), которые используются в выражениях Select,JOIN и WHERE.

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

В качестве обходного пути я решил создать две идентичные физические таблицы с кластеризованными индексами в каждой и с помощью оператора Merge (далее преобразованного в SP, а затем Into в качестве задания агента SQL Server) поддерживать их обновленными. И чтобы убедиться, что нет долгой блокировки зрения. Затем я поменяю (переименую) имена таблиц сразу после завершения каждого слияния. Таким образом, в этом случае вся тяжелая рабочая нагрузка ложится на задание агента SQL Server, поддерживающее обновление таблиц.

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

Есть идеи?

0 ответов

Другие вопросы по тегам