Ответ 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
Вышеприведенное сначала вносит всю совокупность результатов в табличную переменную и создает на ней неявный индекс.
Обычно встроенные ТВФ предпочтительнее для нескольких операторов.