0
我有一個查詢功能。改進搜索查詢
基本上搜索功能允許用戶定義他們「有」和「想要」。然後這個查詢將過濾掉其他用戶創建的所有可能的結果。
例如,我有蘋果(質量好),我想桔子(質量差)。因此,結果將顯示所有橙色(質量差)的用戶,並希望蘋果(質量好)。
所述搜索查詢的位長和我嘗試如下簡化:
這個存儲過程將接收用戶定義的表(的ItemID &質量)作爲參數
@WantUdt AS HaveItemUdt READONLY,
@HaveUdt AS HaveItemUdt READONLY
搜索查詢(用戶可以定義不止一個項目和質量,所以我用IN
):
SELECT * from tbl_Trade WHERE TradeID IN
(SELECT TradeID from tbl_Want w INNER JOIN
(SELECT TradeID FROM tbl_Have
WHERE HaveID IN (SELECT ItemID FROM @HaveUdt) AND
Quality IN (SELECT QualityID FROM @HaveUdt)) as h --to filter [have],
ON w.TradeID = h.TradeID
WHERE WantID IN (SELECT ItemID FROM @WantUdt) AND
Quality =IN (SELECT QualityID FROM @WantUdt) --to filter [want]
)
以上查詢按預期工作。但是,我有性能問題。我試圖通過執行特定的時間(幾秒鐘)內多次這個存儲過程做壓力測試,和我的數據庫(SQL Server 2008 Express的),似乎不能工作,並生成超時錯誤
超時過期。操作完成之前超時的時間或服務器沒有響應。
我想這是因爲上面的查詢使用了太多的IN CLAUSE。
有沒有什麼辦法可以改善這個查詢?
這個問題很難回答,不知道表結構或有樣品數據。請考慮與你的表共享一個SQLFiddle(http://www.sqlfiddle.com),一些有代表性的數據和你的查詢來優化。 –