我正在使用SQL Server 2012。
我有一张如下表所示的表,
create table myTable
(
Id int identity(1, 1) constraint PK_myTable primary key(Id),
DateEntry date,
FundCode nvarchar(10),
Sedol nvarchar(7),
Name nvarchar(150),
Nominal int,
PriceDate date,
Price float,
PriceCcy nvarchar(3),
PriceSource nvarchar(30)
)
因此大多数选择查询都在dateEntry字段& FundCode字段。
所以我决定在下面创建两个索引。我想知道,如果我们可以假设每个选择查询都有一个DateEntry作为where子句的一部分需要第一个索引吗?因为如果没有提供FundCode,它仍然可以使用第二个索引或是不正确的?
create index IX_tblEQ_Holdings_Date on tblFI_Holdings(DateEntry)
create index IX_tblEQ_Holdings_DateFund on tblFI_Holdings(DateEntry, FundCode)
答案 0 :(得分:2)
如果index有多个字段,查询只能使用其中的一部分,但只能从左侧使用,例如,如果索引有字段A,B和C,查询可以使用A,或A和B或A,B和C,但不是A和C.
在你的情况下,你可能只对第二个索引感到满意。第一个当然会稍微小一点,但它也会导致更新/插入的开销,所以通常创建这样的索引并不是一个好主意。