【问题标题】:Optimize SQL select query with join使用连接优化 SQL 选择查询
【发布时间】:2013-11-28 10:00:26
【问题描述】:

我有两张桌子:

 Shop_Products
 Shop_Products_Egenskaber_Overruling

我想选择 Shop_Products_Egenskaber_Overruling 中的所有记录,这些记录在 店铺_产品。这意味着具有相同 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

有什么优化建议吗?

最好的问候。

【问题讨论】:

    标签: mysql sql sql-server tsql


    【解决方案1】:

    你可以这样做,但不确定它是否能确保优化

    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
    

    【讨论】:

    • 谢谢,内部连接是解决方案!
    【解决方案2】:

    您实际上是在寻找 INNER JOIN。

    SELECT 
        SO.*,
        SPEO.*
    FROM SHOP_PRODUCTS SP 
        INNER JOIN Shop_Products_Egenskaber_Overruling SPEO 
            ON SP.ProductNum = SPEO.ProductNum
    

    这将比您的 CROSS-JOIN 提高性能,因为查找具有相等 ProductNum 的记录的条件隐含在 JOIN 条件中,并且消除了 WHERE 子句。

    WHERE 子句总是在 JOIN 之后执行。在您的情况下,所有可能的组合都是由 CROSS JOIN 创建的,然后由 WHERE 子句中的条件过滤。

    通过使用INNER JOIN,您将在第一步中进行过滤。

    【讨论】:

    • 感谢工作解决方案和解释!它确实增加了加载时间...
    • @micknt 不客气。顺便说一句,就 JOINS 而言,CROSS JOIN 应该始终是您的最后选择。
    【解决方案3】:

    交叉连接速度较慢,因为它产生所有组合,这些组合由 where 谓词过滤。所以你可以使用 INNER JOIN 来获得更好的性能。但我认为无论如何检查此查询的执行计划会很有用,因为在 Oracle 中,where 和内部连接解决方​​案之间没有区别Inner join vs Where

    【讨论】:

    • 谢谢,内部连接是解决方案!
    【解决方案4】:

    尝试使用 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..

    【讨论】:

    • 谢谢,内部连接是解决方案!
    猜你喜欢
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多