爲什麼這個查詢需要12秒,並且它完美地包含索引。SQL查詢優化加快SELECT DISTINCT
SELECT DISTINCT TOP 5000 -- Search For User has currently associated with given Email Address
u.i_UserID,
u.vch_LoginName,
ea.vch_EmailAddress,
u.vch_DisplayName,
CAST(GETDATE()as smalldatetime) AS 'd_DateAdded',
'Current' AS 'vch_RecordStatus'
FROM
tblUser AS u --WITH (NOLOCK)
JOIN
[User].dbo.tblEmailAddress AS ea --WITH (NOLOCK)
ON u.i_EmailAddressID = ea.i_EmailAddressID
WHERE
ea.vch_EmailAddress LIKE '%kala%' OPTION (RECOMPILE)
如果你看看查詢計劃,你很可能會看到聚簇索引掃描 - 並且這應該告訴你完美的索引沒有被使用。 –
我知道你有他們的評論,但你應該忘記使用NOLOCK作爲性能的助推器。它可以提高性能,但它帶來了很多包袱。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/你也有頂5000,但沒有秩序。這意味着你不會總是獲得相同的5000行。 –
vch_EmailAddress上的篩選器有多選擇性? IE,平均返回多少行,總共有多少行存在於tblEmailAddress表中? – dean