创建具有多个字段的索引

时间:2015-08-25 15:11:25

标签: sql-server database-design sql-server-2012 database-indexes

我正在使用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)

1 个答案:

答案 0 :(得分:2)

如果index有多个字段,查询只能使用其中的一部分,但只能从左侧使用,例如,如果索引有字段A,B和C,查询可以使用A,或A和B或A,B和C,但不是A和C.

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