创建具有多个字段的索引

creating indices with multiple fields

我正在使用 SQL Server 2012。

我有一个 table 如下所示,

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)
 )

所以大多数 select 查询将在 dateEntry 字段和 FundCode 字段上。

所以我决定创建下面的两个索引。我想知道是否我们可以假设每个 select 查询都将 DateEntry 作为 where 子句的一部分是否需要第一个索引?因为如果没有提供 FundCode,它仍然可以使用第二个索引,或者那是不正确的?

create index IX_tblEQ_Holdings_Date on tblFI_Holdings(DateEntry)
create index IX_tblEQ_Holdings_DateFund on tblFI_Holdings(DateEntry, FundCode)

如果索引有超过1个字段,查询只能使用其中的一部分,但只能从左边开始,所以例如如果索引有字段A,B和C,查询可以使用A,或A和B 或 A,B 和 C,但不是 A 和 C。

在你的情况下,你可能只需要第二个索引就可以了。第一个当然会稍微小一些,但它也会导致更新/插入的开销,所以通常创建这样的索引不是一个好主意。