[英]Optimize SQL select query with join
我有兩個表:
Shop_Products
Shop_Products_Egenskaber_Overruling
我想選擇Shop_Products_Egenskaber_Overruling中的所有記錄,而Shop_Products中有相關記錄。 這意味着記錄等於ProductNum。
下面的語句對我來說很有效,但是我認為CROSS JOIN對於大型記錄集不是最好的方法。 在Web控件中使用該語句時,即使只有1000條記錄,它也會變得很慢。 有沒有更好的方法可以做到這一點?
SELECT Shop_Products.*, Shop_Products_Egenskaber_Overruling.*
FROM Shop_Products CROSS JOIN
Shop_Products_Egenskaber_Overruling
WHERE Shop_Products.ProductNum = Shop_Products_Egenskaber_Overruling.ProductNum
有什么優化建議嗎?
最好的祝福。
您可以這樣做,但是不確定是否可以確保優化
SELECT Shop_Products.*, Shop_Products_Egenskaber_Overruling.*
FROM Shop_Products
INNER JOIN Shop_Products_Egenskaber_Overruling on Shop_Products.ProductNum = Shop_Products_Egenskaber_Overruling.ProductNum
您實際上是在尋找INNER JOIN。
SELECT
SO.*,
SPEO.*
FROM SHOP_PRODUCTS SP
INNER JOIN Shop_Products_Egenskaber_Overruling SPEO
ON SP.ProductNum = SPEO.ProductNum
這將比您的CROSS-JOIN有了更好的性能,因為在JOIN
條件中隱含了查找具有相同ProductNum記錄的條件,並且消除了WHERE
子句。
WHERE
子句始終在JOIN之后執行。 對於您而言,所有可能的組合都是由CROSS JOIN創建的,然后由WHERE子句中的條件過濾。
通過使用INNER JOIN
您將在第一步中進行過濾。
交叉聯接的速度較慢,因為它會產生所有組合,然后按謂詞過濾。 因此,您可以使用INNER JOIN以獲得更好的性能。 但是我認為無論如何都要檢查該查詢的執行計划,這將很有用,因為在Oracle中,where和內部聯接解決方案之間的區別不大。
嘗試使用INNER JOIN
SELECT Produkter.*, Egenskaber.*
FROM Shop_Products Produkter
INNER JOIN Shop_Products_Egenskaber_Overruling Egenskaber ON Produkter.ProductNum=Egenskaber.ProductNum
Jag namngav aven dem pa Norska ..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.