2016-07-20 4 views
0

У меня есть запрос:Как создать индекс для КТР

With Cte as (some code) 

Select * 
from Cte 
order by id 

Могу ли я создать индекс для этого КТР?

Я использую ms SQL Server 2005

Спасибо.

+3

Вы не можете добавить индекс в cte. http://stackoverflow.com/questions/3995958/adding-an-index-to-a-cte –

+0

Вы не можете, CTE как динамический вид внутри оператора. Вероятно, вам нужно создать временную таблицу и проиндексировать ее. –

+0

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

ответ

1

Как указано выше Индексы не могут быть добавлены в CTE.

Однако в CTE выбор добавления предложения ORDER BY на объединенные поля может сократить время выполнения.

Вам необходимо также ДОБАВИТЬ ВЫБРАТЬ ТОП 100 ПРОЦЕНТОВ, чтобы разрешить выбор ORDER BY в CTE.

0

Вы можете рассмотреть возможность использования материализованного/индексированного представления в качестве underlyer вместо CTE. Это потребует, чтобы вы создали DDL заранее, но если производительность запроса важна, это может быть помощь. Кроме того, имейте в виду, что вы не сможете изменить базовые таблицы из-за требования к схемам.

Смежные вопросы