2013-03-15 239 views
-1

我得到了這個查詢的工作,但它真的很慢。我是SQL新手,所以對調優的幫助將不勝感激。SQL查詢運行緩慢

SELECT 
    REPLACE(LoweredUserName,'@domain.com','') as Name, 
    COUNT(LoweredUserName) as Numb 
FROM 
    aspnet_Users 
JOIN 
    WarrantyRegistration ON CHARINDEX('Added by ' + aspnet_Users.LoweredUserName, 
WarrantyRegistration.Comment) > 0 
GROUP BY 
    aspnet_Users.LoweredUserName 
ORDER BY 
    LoweredUserName ASC 

感謝

+3

**您需要向我們展示表和索引定義。**診斷慢查詢需要全表和索引定義,而不僅僅是描述或釋義。也許你的表格定義不好。也許索引沒有正確創建。也許你沒有一個你認爲你做過的那個專欄的索引。沒有看到表和索引定義,我們不能說。如果你知道如何做一個'EXPLAIN'或者得到一個執行計劃,那就把結果也放在問題中。 – 2013-03-15 19:27:57

+0

@AndyLester操作不可SARGable,因此索引是什麼並不重要。 – 2013-03-16 00:18:07

回答

2

如果WarrantyRegistration表中有添加註冊的用戶的ID,則應該加入ID而不是進行CHARINDEX()加入。如果你不能做一個外鍵加入,你應該認真考慮修改你的模式,以便你可以,如果可能的話。

0

您正在執行CROSS JOIN的aspnet_Users *和* WarrantyRegistration,儘管這可能不是很明顯,因爲每個WarrantyRegistration記錄必須B(再次)搜索每aspnet_Users記錄。

你能創建一個索引WarrantyRegistration.Comment *來支持這個查詢嗎?