Мне нужно проверить, существует ли строка в базе данных; Тем не менее, я пытаюсь найти способ сделать это, который предлагает лучшую производительность. Это лучше всего обобщить на примере.
Предположим, у меня есть следующая таблица:
dbo.Person(
FirstName varchar(50),
LastName varchar(50),
Company varchar(50)
)
Предположим, что в этой таблице миллионы строк, однако ТОЛЬКО столбец Company
имеет индекс.
Я хочу выяснить, существует ли конкретная комбинация FirstName
, LastName
и Company
. Я знаю, что могу сделать это:
IF EXISTS(select 1 from dbo.Person where FirstName = @FirstName and LastName = @LastName and Company = @Company)
Begin
....
End
Однако, если я не ошибаюсь, будет выполнено полное сканирование таблицы.
Что я действительно хотел бы сделать, так это запрос с использованием индекса. Из таблицы выше я знаю, что следующий запрос будет иметь высокую производительность, поскольку он использует индекс:
Select * from dbo.Person where Company = @Company
Есть ли способ выполнить поиск только по этому подмножеству данных? например как то так:
select * from (
Select * from dbo.Person where Company = @Company
)
where FirstName = @FirstName and LastName = @LastName
Таким образом, сканирование таблицы будет выполняться только для гораздо более узкого набора данных.
Я знаю, что приведенный выше запрос не будет работать, но есть ли такой запрос?
О, и я не могу создать временные таблицы, так как у пользователя будет только доступ для чтения.