У меня ситуация/контекст, где конкретный вид занимает 120 секунд перед возвратом результата. При выполнении простого ALTER (или drop/create) вид занимает от 1 до 2 секунд. Как это возможно и как мы можем это исправить - поскольку у нас нет выделенного администратора баз данных, который может помочь нам. Создание индексированных представлений не является вариантом из-за связанной настройки сервера, которую мы имеем (MSSQL Server 2012 жалуется на это).MSSQL 2012 быстрее просматривается после выполнения «alter»
Ниже приведена информация о настройке.
TL; DR View_MAIN занимает 120 секунд после определенного количества времени. Когда мы выполняем представление ALTER на View_X, View_Y и View_MAIN, ничего не меняя, производительность снова нормальна к 1 - 2 секундам.
View_MAIN
SELECT
column1, column2, column3, column4, column5
FROM View_X
UNION ALL
SELECT
column1, column2, column3, column4, column5
FROM View_Y
View_X
SELECT
LTRIM(RTRIM(table1.a)) as column1,
table2.b COLLATE Latin1_General_CI_AS as column2,
table1.c as column3,
CAST(table3.d AS DATETIME) as column4,
'XXXXXX' as column5
FROM
[linkedserver01].[DATABASE_IDN].[dbo].[dataForX] table1
LEFT OUTER JOIN [linkedserver02].[DATABASE_INFM] as table2
ON table2.id = table1.id
LEFT OUTER JOIN [linkedserver02].[DATABASE_PIK] as table3
ON table3.id = table1.id
View_Y
SELECT
LTRIM(RTRIM(table1.a)) as column1,
table2.b COLLATE Latin1_General_CI_AS as column2,
table1.c as column3,
CAST(table3.d AS DATETIME) as column4,
'YYYYY' as column5
FROM
[linkedserver01].[DATABASE_IDN].[dbo].[dataForY] table1
LEFT OUTER JOIN [linkedserver02].[DATABASE_INFM] as table2
ON table2.id = table1.id
LEFT OUTER JOIN [linkedserver02].[DATABASE_PIK] as table3
ON table3.id = table1.id
Каковы запросы против View_Main? Я подозреваю, что у вас есть два запроса, которые используют один и тот же план. Поэтому, когда вы исправляете текущий запрос, у вас будет другой, который замедляется позже (этого еще не произошло). Я добавил комментарии ниже к первому предложенному Ответу (по подолуске). – ripvlan
SQL Server строит хороший план для первого запроса, но это не очень хороший план для второго запроса. Если это проблема, то исправление Temp - использовать плагины для оптимизации для одного запроса. Большее исправление заключается в параметризации двух запросов, чтобы сделать их разными. Планы хранятся в буквальном тексте. Найдите используемый PLAN, чтобы выяснить причину проблемы. ALTER VIEW сбрасывает план. – ripvlan