MySQL连接:子查询或ON中的条件?

时间:2013-09-21 03:44:38

标签: mysql

哪个更有效?

LEFT JOIN  cscart_seo_names seo
ON p.product_id = seo.object_id AND seo.type = 'p'

OR

LEFT JOIN (
            SELECT seo.object_id, seo.name
            FROM cscart_seo_names seo
            WHERE seo.type = 'p'
        ) seo
            ON p.product_id = seo.object_id

2 个答案:

答案 0 :(得分:1)

检查效率的唯一可靠方法是检查实际执行计划。注意,执行顺序不同于查询中出现的顺序表。

在这种特殊情况下(假设它不是更大查询的一部分),我非常确定优化器会为您的查询的两个版本选择相同的计划......

答案 1 :(得分:0)

JOIN可以创建一个更适合您的查询的执行计划,并且可以预测应该加载哪些数据以进行处理并节省时间,这与子查询不同,在子查询中它将运行所有查询并加载所有数据以执行处理

子查询的好处是它们比JOIN更具可读性:这就是大多数新SQL用户更喜欢它们的原因;这是简单的方法;但是在性能方面,JOINS在大多数情况下都更好,即使它们也不难阅读。