Пожалуйста, рассмотрите Customer
таблицу в Northwind
База данных:
Я добавляю индекс по 3 столбцам:
CREATE NONCLUSTERED INDEX [idx_1] ON [dbo].[Customers]
([CompanyName] ASC, [City] ASC, [Country] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF,
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
, и я проверил эти запросы:
1) SELECT CompanyName,city,country FROM [Northwind].[dbo].[Customers] where CompanyName='a' and city='b' and country='c'
2) SELECT CompanyName,city,country FROM [Northwind].[dbo].[Customers] where country='c' and CompanyName='a' and city='b'
3) SELECT CompanyName,city,country FROM [Northwind].[dbo].[Customers] where CompanyName='a' and country='c'
4) SELECT CompanyName,city,country FROM [Northwind].[dbo].[Customers] where CompanyName='a' and city='b'
все вышеперечисленные запросы используют Index Seek
.
Существуют ли эти предикаты Верно ?
A) Если в моем индексе есть N
столбцов, то все перестановки этих N
столбцов с для равенства их значений используется Index Seek
, поэтому порядок столбцов в Index
не имеет значения, когда все столбцы участвуют в предложении Where
.
B) Если в моем индексе есть N
столбцы (например: Col1, Col2, Col3,...) then all these combinations in
Где clause use
Index Seek`:
B-1) Col1, Col2,
B-2) Col1, Col2, Col3
B-3) Col1, Col3, Col4
B-4) Col1, Col4, Col7
Поэтому Col1
важно использовать Index Seek
.
Пожалуйста, рассмотрите этот запрос:
5) SELECT CompanyName,city,country, PostalCode FROM [Northwind].[dbo].[Customers] where CompanyName='a' and city='b' and country='c'
C) Я добавил PostalCode
в список выбора и почему Index Seek
конвертируется в Index Scan
? Почему Seek
не конвертируется в Seek + Key Lookup
?