【发布时间】:2018-08-20 04:10:39
【问题描述】:
我有以下查询,大约需要 26 行才能返回 8700 行数据。
SELECT
R.ClientReferralID,
R.ClientID,
C.FirstName,
C.LastName,
C.FullName,
dbo.fnGetLocalDate(R.ReferralDate) as ReferralDate,
RT.ReferralTypeName,
R.ReferralTypeOther,
RT2.ReferredToName,
R.ReferredToOther,
R.ReferredByID,
U.FullName as ReferredBy,
TS.TimeSpentName,
R.Notes,
L.ReferralLocationID,
L.ReferralLocationName as Location,
R.ReferralLetterSentID,
R.ReferralLetterOnFileID,
dbo.fnGetLocalDate(R.DateCreated) as DateCreated,
U2.FullName as UserCreated,
dbo.fnGetLocalDate(R.DateModified) as DateModified,
U3.FullName as UserModified
FROM
ClientReferral R
INNER JOIN Client C on
R.ClientID = C.ClientID
INNER JOIN LookUp.ReferralType RT on
R.ReferralTypeID = RT.ReferralTypeID
INNER JOIN LookUp.ReferredTo RT2 on
R.ReferredToID = RT2.ReferredToID
INNER JOIN UserAccount U on
R.ReferredByID = U.UserAccountID
INNER JOIN LookUp.TimeSpent TS on
R.TimeSpentID = TS.TimeSpentID
INNER JOIN LookUp.ReferralLocation L on
R.ReferralLocationID = L.ReferralLocationID
INNER JOIN UserAccount U2 on
R.UserCreated = U2.UserAccountID
LEFT JOIN UserAccount U3 on
R.UserModified = U3.UserAccountID
WHERE
(R.ReferralDate >= @StartDate or @StartDate is null) and
(R.ReferralDate <= @EndDate or @EndDate is null)
ORDER BY
R.DateCreated DESC
执行计划可以在这里查看:
https://www.brentozar.com/pastetheplan/?id=B1A5ji7tf
我看到最昂贵的操作是 65% 的哈希匹配连接。我期待以下指数可以改善这一点,但没有:
CREATE NONCLUSTERED INDEX [Name] ON [dbo].[ClientReferral]
(
[ClientID] ASC
)
有人知道我可以在这里做什么吗?如果需要一些示例数据,请告诉我。
【问题讨论】:
-
1) 尝试禁用在
Client扫描中使用的idx 2) 尝试从WHERE子句中删除OR部分,再看看执行计划。 -
您希望通过摆脱这个哈希匹配连接查询获得什么?
-
@IvanStarostin - 与此没有区别。
-
它还在使用禁用索引吗? “没有区别”是什么意思?你有
ReferralDate的索引吗? -
@IvanStarostin ,执行计划与执行时间保持不变。
标签: sql-server tsql azure-sql-database