我有以下的疑問,我很想找到一個更好的辦法來做到這一點,因爲它看起來不正確我這樣做的方式......SQL Server查詢優化問題
編輯
對不起,我沒有指定我只想返回實際匹配所有設施的廣告!
SELECT TOP 50 Advert.Id
FROM Advert
WHERE Id in(SELECT Advert_id FROM AdvertsToAmenities WHERE Amenity_id = 1 AND Advert_Id = Id)
AND Id in(SELECT Advert_id FROM AdvertsToAmenities WHERE Amenity_id = 3 AND Advert_Id = Id)
AND Id in(SELECT Advert_id FROM AdvertsToAmenities WHERE Amenity_id = 5 AND Advert_Id = Id)
-- OR --
SELECT TOP 50 Advert.Id
FROM Advert
JOIN AdvertsToAmenities a on Advert.Id = a.Advert_id
JOIN AdvertsToAmenities b on Advert.Id = b.Advert_id
JOIN AdvertsToAmenities c on Advert.Id = c.Advert_id
WHERE a.Amenity_id = 1
AND b.Amenity_id = 3
AND c.Amenity_id = 5
我想知道如何優化這些查詢!
「要做到這一點」 - 你能不能給我們一個很好的解決問題的說明,而不必大家一起讀書的問題解析查詢? – Oded 2011-04-19 15:24:56
看起來你的問題與你的評論不一樣。請記住,SQL Server從查詢中派生出的執行路徑是高度優化的,儘管您聲明SQL的順序方式。可能需要檢查實際執行計劃以確定是否需要進一步優化。 如果你指的是讓sql更易讀易懂,那麼顯然有改進的餘地。我會試着拿出一個例子。 – 2011-04-19 15:27:24
此外,您可能會發現表格中體面的索引/鍵會比重新編寫查詢有更戲劇性的「優化」結果。 – 2011-04-19 15:30:14