【发布时间】:2015-06-11 22:15:44
【问题描述】:
我有一个 SQL 语句,它给了我一个 Key Lookup 来处理下面这个查询。由于它是 3 部分联合的一部分,因此最好摆脱键查找。
我的查询如下。
SELECT
c.customerName,
c.customerNumber,
totals.TotalLoanAmount,
totals.TotalCommitmentAmount,
l.loanNumber,
l.commitmentAmount,
ed.amountThreshold,
ex.exceptionId,
IsNull(ex.reminderDateGracePeriod, ed.defaultReminderDateGracePeriod) AS gracePeriod,
ex.reminderDate AS targetDate,
IsNull(ex.exceptionState, 'N') AS exceptionState,
ex.exceptionState AS GeneralExceptionState
FROM
exceptionDefinition AS ed
INNER JOIN
exception AS ex ON ed.exceptionDefId = ex.exceptionDefId
AND ex.loanId IS NULL
INNER JOIN
customer AS c ON c.customerId = ex.customerId
LEFT OUTER JOIN
loan AS l ON l.loanId = ex.loanId
INNER JOIN
viewCustomerLoanTotals AS totals ON totals.customerId = c.customerId
WHERE
ed.requireReminderDate = 'Y'
AND ex.statusType = 'required'
我试图为此设置一个覆盖索引,因为它在异常表的主键上对聚集索引进行键查找。
异常标识
这是我选择的列的覆盖索引,其中 statusType 作为 where 子句的一部分。
CREATE NONCLUSTERED INDEX [IX_EXCEPTIONPROCESS_COVER] ON [dbo].[exception]
(
[exceptionId] ASC,
[loanId] ASC,
[reminderDate] ASC,
[reminderDateGracePeriod] ASC,
[exceptionState] ASC
)
INCLUDE ([statusType]) ON [PRIMARY]
这根本不会对 Key 查找产生任何影响。我试图强迫它使用索引,但它变成了 91% 的资源,而不是我试图摆脱的 61%。
任何见解都会很棒
【问题讨论】:
标签: sql-server indexing key