我在银行工作。我们有一个包含 40 亿条记录的表,我为三列创建了一个非聚集索引:ACNO、HisDate、BranchNo
。
我的问题是,如果运行此查询
SELECT *
FROM dbo.LastBalance
WHERE HisDate = '20170813'
AND BranchNo = '0512'
SQL Server 是否使用该索引?
在 SQL Server 使用索引之前,我应该在 WHERE
子句中使用三列吗?
WHERE
子句中的列顺序重要吗?
谢谢。
最佳答案
如果索引真的是这样创建的:
CREATE INDEX (name) ON dbo.YourTable(ACNO, HisDate, BranchNo)
那么它可能会被使用,如果:
- 您在
WHERE
中使用了其中所有三列条款 - 如果您只使用
ACNO
和HisDate
- 如果您只使用
ACNO
但它永远不会在您的情况下使用 - 它仅在您指定n最左边时使用 索引中的列(这适用于所有复合索引 - 使用多个列的索引)。
您仅使用HisDate
和BranchNo
- 但您没有指定 ACNO
,所以这个索引是无用并且永远不会被使用。您应该在 (HisDate, BranchNo)
上有一个索引- 那会有帮助
关于sql - SQL Server 如何使用其索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45663941/