Можем ли мы создавать индекс в табличной функции?

Можно ли создать индекс в столбце в таблице табличных функций в SQL Server 2008?

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

Любая помощь будет высоко оценен.

заранее спасибо

Ответы

Ответ 1

Если функция, основанная на таблице, имеет встроенный сорт, вы должны создать индекс в столбцах базовой таблицы.

Если это множественное утверждение TVF в SQL Server 2008 (как отмечено), вы можете создавать индексы, связанные с первичным ключом или уникальными ограничениями.

В SQL Server 2014+ можно объявлять встроенные индексы, не связанные с каким-либо ограничением.

пример

CREATE FUNCTION F()
RETURNS @X TABLE
(
A INT PRIMARY KEY /*<-- Implicit clustered index*/
)
AS
BEGIN
INSERT INTO @X 
    VALUES(1),(2)
RETURN;
END

GO

SELECT *
FROM F()
WHERE A = 12

enter image description here

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

Обычно встроенные ТВФ предпочтительнее для нескольких операторов.