Мне нужно проверить, существует ли строка в базе данных; однако я пытаюсь найти способ сделать это, что обеспечивает лучшую производительность. Это лучше всего обобщается на примере.SQL Выбирает на подмножествах
Давайте предположим, что у меня есть следующая таблица:
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
Таким образом, это будет делать только сканирование таблицы в гораздо более узкой коллекции данных.
Я знаю, что указанный выше запрос не будет работать, но есть ли запрос?
О, и я не могу создать временные таблицы, так как пользователь будет иметь доступ только для чтения.
Ах, большое спасибо. Из любопытства, каковы теги, используемые для создания частей моих вопросов в форме кода, как вы это делали выше? Большое спасибо – Adam
@Adam: просто введите 4 пробела в свой код. или выделите весь свой код, затем нажмите значок 101010 (следующий значок двойной цитаты (рядом с значком земли)) – Hao
Большое спасибо за все быстрые ответы – Adam