SQL Server如何使用其索引

时间:2017-08-13 19:08:56

标签: sql sql-server indexing

我在银行工作。我们有一个包含40亿条记录的表,我为三列创建了一个非聚集索引:ACNO, HisDate, BranchNo

我的问题是,如果运行此查询

SELECT * 
FROM dbo.LastBalance 
WHERE HisDate = '20170813' 
  AND BranchNo = '0512'

SQL Server是否使用该索引?

我应该在WHERE子句中使用三列,直到SQL Server使用索引?
列序列在WHERE cluase中是否重要? 谢谢。

2 个答案:

答案 0 :(得分:4)

如果索引真的是以这种方式创建的:

CREATE INDEX (name) ON dbo.YourTable(ACNO, HisDate, BranchNo)

然后可以使用,如果:

  • 您在WHERE子句
  • 中使用所有其中三列
  • 如果您只使用ACNOHisDate
  • 如果您只使用ACNO

但是 从不 会在您的情况下使用 - 如果您指定 n最左侧,则可以使用 索引中的列(这适用于所有复合索引 - 使用多个列的索引)。

您仅使用HisDateBranchNo - 但您没有指定ACNO,因此该索引无用,永远不会被使用。你应该在(HisDate, BranchNo) - 上有一个有用的索引

答案 1 :(得分:1)

可能不是。 Oracle对其索引进行了“跳过扫描”操作。我不认为SQL Server实现了这样的功能。

查询的最佳索引将HisDateBranchNo作为索引中的前两列(按任意顺序排列)。