我有兩個表:SQL連接查詢性能問題
1. [User].[Users]
--------------------------------------------------
|[UserID] | INT (primary key) |
|[Username] | NVARCHAR(50) |
|[IsVerified] | BIT |
|[ModifiedDate] | DATETIME |
--------------------------------------------------
2. [User].[EmailAddresses]
--------------------------------------------------
|[UserID] | INT (foreign key) |
|[EmailAddressID] | INT |
|[EmailAddress] | NVARCHAR(50) |
|[IsPrimary] | BIT |
|[IsVerified] | BIT |
|[ModifiedDate] | DATETIME |
--------------------------------------------------
現在,當我運行此查詢,它執行很大:
SELECT
u.[UserID],
u.[Username],
u.[IsVerified],
e.[EmailAddressID],
e.[EmailAddress]
FROM [User].[Users] u
INNER JOIN [User].[EmailAddresses] e
ON e.[UserID] = u.[UserID]
WHERE (@pEmailAddress = e.[EmailAddress])
AND (@pPassword = u.[Password])
但,當我運行此查詢,它表現可怕:
SELECT
u.[UserID],
u.[Username],
u.[IsVerified],
e.[EmailAddressID],
e.[EmailAddress],
e.[IsPrimary],
e.[IsVerified],
e.[ModifiedDate]
FROM [User].[Users] u
INNER JOIN [User].[EmailAddresses] e
ON e.[UserID] = u.[UserID]
WHERE (@pEmailAddress = e.[EmailAddress])
AND (@pPassword = u.[Password])
請注意,我只是從這3列中加1(e.[IsPrimary]
,e.[IsVerified]
,e.[ModifiedDate]
),並且它演變成可怕(延遲5-6秒)...
它可能是什麼?我沒有加入表格嗎?是因爲我在兩個表中都有一些同名的列?
另外,我沒有太多的記錄...(約20條)...
UPDATE: 我發現 「(。@pPassword = U [密碼])」 還刪除這個問題,沒有它就表現出色,它與索引有什麼關係?
這裏是執行計劃:
我的索引:
- [用戶] [用戶]:
[用戶名](ASC) - 主鍵
- [用戶] [EmailAddresses]
[用戶名](ASC),[EmailAddressID](ASC) - 主鍵
[EmailAddress的] (ASC) - 唯一鍵
你檢查過查詢計劃?在SQL Server Management Studio中,查詢上方有一個按鈕,可在執行後運行估計的計劃。這將爲您提供查詢的可視化步驟,並按百分比向您顯示查詢中最昂貴的部分。它也會建議你應該創建的任何索引。請運行它,讓我們知道它回來了。 – Dom
@DomDaFonte謝謝,我添加了一個執行計劃... –
沒問題。在您的查詢計劃中,我看到電話字段上有一個聚集索引掃描,儘管我看不到其中的電話號碼。 1.爲每個表運行sp_spaceused併發送結果。 2.你可以右鍵單擊Ssms中的表,創建一個類似的併爲每個表發佈ddl? 3.最後是密碼字段散列?我可能會在ddl中看到這個,但讓我知道。 – Dom