【问题标题】:creating indices with multiple fields创建具有多个字段的索引
【发布时间】:2015-11-19 09:03:20
【问题描述】:

我使用的是 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)

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-06-19
      • 2014-11-03
      • 2019-09-13
      • 1970-01-01
      • 2017-06-22
      • 2021-11-30
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      相关资源
      最近更新 更多