创建具有多个字段的索引
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。
在你的情况下,你可能只需要第二个索引就可以了。第一个当然会稍微小一些,但它也会导致更新/插入的开销,所以通常创建这样的索引不是一个好主意。
我正在使用 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。
在你的情况下,你可能只需要第二个索引就可以了。第一个当然会稍微小一些,但它也会导致更新/插入的开销,所以通常创建这样的索引不是一个好主意。