Давайте на минуту посмотрим, что запрос соответствует действительному бизнес-требованию.
Тот факт, что представление большое, не означает, что он должен работать плохо. Производительность выбора из этого представления определяется главным образом макетом базовых таблиц . Даже с учетом того, что левые объединения более 20 таблиц поиска, SQL Server должен возвращать результат в миллисекундах при условии, что таблица T_CUS_TSK_TASK
правильно проиндексирована для выполняемого запроса.
Вы должны подходить к этому так же, как к любой другой оптимизации запросов. Изучите основные факторы ввода-вывода (SET STATISTICS IO ON
), изучите план запроса, посмотрите оценки мощности, проверьте правильность статистики, посмотрите на отсутствующие подсказки индекса запроса и подумайте, как можно соответствующим образом изменить схему таблиц. , Ваша отправная точка должна быть такой: Разработка индексов . Даже беглый взгляд на вашу (не представленную в посте) схему таблиц должен показать, что, скажем, deleted
не крайний левый ключ кластеризованного индекса, тогда у вас наверняка есть проблема.
Ваш текущий подход к слепому взлому на запрос, основанный на тексте , совершенно непрофессиональный.
Сейчас, конечно, сложно , чтобы поверить, что этот запрос соответствует действительным требованиям бизнеса. Но, тем не менее, ваш взгляд на оптимизацию запросов и дизайн модели данных («У этих таблиц были первичные ключи и внешние ключи») примитивен, если использовать мягкий термин. Прочитайте о дизайне индексов, прочитайте о покрывающих индексах, купите книгу (например: Внутри Microsoft SQL Server 2005: настройка и оптимизация запросов ).