Подтвердить что ты не робот

Добавление INDEX в CTE

Должен быть довольно прямой вопрос. Могу ли я добавить INDEX к выражению общей таблицы (CTE)?

4b9b3361

Ответ 1

Нет.

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

Если вам нужен индекс, создайте регулярное представление с помощью SELECT вашего CTE и сделайте его индексированным представлением (добавив кластерный индекс в представление). Вам нужно будет выполнить набор правил, описанных здесь: Создание индексированного представления.

Ответ 2

У меня было такое же требование. Индексы не могут быть добавлены в CTE. Тем не менее, в CTE выберите добавление предложения ORDER BY в объединенные поля, сократив время выполнения от 20 минут или более до менее 10 секунд.

(Вам нужно также нажать SELECT TOP 100 PERCENT, чтобы разрешить ORDER BY в выборе CTE.)

[редактировать, чтобы добавить перефразированную цитату из комментария ниже]:
Если у вас DISTINCT в CTE, то TOP 100 PERCENT не работает. Этот метод мошенничества всегда доступен: без необходимости в TOP вообще в выборе, измените инструкцию ORDER BY следующим образом:
ORDER BY [Blah] OFFSET 0 ROWS

Ответ 3

@B H - Чтобы обойти проблему DISTINCT с использованием TOP 100% или TOP 1000000, вы всегда можете использовать GROUP BY. Служит той же цели и иногда быстрее, чем DISTINCT.