我有两张桌子:
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/