У меня есть таблица, скажем, Table1, которая имеет два столбца
ID Field1
------- -------------
INT VARCHAR(MAX)
Таблица имеет ок.100 000 записей и ID является первичным ключом и имеет уникальный индекс для столбца 'Field1'.Я выполняю следующий запрос
SELECT T11.ID FROM Table1 T11
INNER JOIN dbo.MyFunc() T22
ON T11.Field1 = T22.ElementValue
Данный запрос имеет высокую стоимость ввода-вывода.Он выполняет сканирование индекса по полю 1 таблицы 1, но не использует поиск по индексу.MyFunc - это пользовательская функция, которая возвращает табличную переменную схемы (ElementValue VARCHAR (MAX)).Здесь для простоты я пропустил переменные, переданные MyFunc.Но если я выполню следующий запрос, он будет быстрым и будет использовать поиск по индексу
SELECT T11.ID FROM Table1 T11
WHERE T11.Field1 = 'Test'
MyFunc также возвращает 'Test' как переменную таблицы, состоящую из одного столбца и одной строки.не может избежать использования MyFunc.у него есть некоторый повторно используемый код, который используется в no.хранимых процедур.
Пожалуйста, предложите любую альтернативу, чтобы сделать это быстро.
РЕДАКТИРОВАТЬ: Я нашел, где была проблема.На самом деле это было несоответствие данных.В MyFunc я использовал NVARCHAR, но Field1 был VARCHAR.Когда я изменил NVARCHAR на VARCHAR, оптимизатор запросов правильно выбрал индекс