我有两张桌子:

 Shop_Products
 Shop_Products_Egenskaber_Overruling

我想选择商店产品中的所有记录
购买产品。这意味着ProductNum相等的记录。
下面的语句对我很有用,但我不认为交叉连接是大型记录集的最佳方法。当在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
    SO.*,
    SPEO.*
FROM SHOP_PRODUCTS SP
    INNER JOIN Shop_Products_Egenskaber_Overruling SPEO
        ON SP.ProductNum = SPEO.ProductNum

与交叉连接相比,这将提高性能,因为查找ProductNum相等的记录的条件在JOIN条件中是隐式的,WHERE子句被消除。
WHERE子句总是在联接之后执行。在您的例子中,所有可能的组合都是由交叉连接创建的,然后由WHERE子句中的条件过滤。
通过使用INNER JOIN可以在第一步中进行过滤。

关于mysql - 使用联接优化SQL选择查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20262934/

10-11 01:16