对INNER JOIN和SUBSELECT进行基准测试

时间:2014-09-14 01:58:59

标签: mysql sql

一般来说,是否有使用子选择的时间和何时使用内连接的经验法则?对我来说,它通常是硬币翻转,因为我不太了解内部。

我什么时候应该使用哪个?

SELECT item1, item2 FROM table1 
    INNER JOIN table2 on table1.field=table2.field

或 -

SELECT item1, item2 FROM table1 WHERE field in
    (SELECT field FROM table2)

2 个答案:

答案 0 :(得分:2)

我认为类似的子查询版本应该是:

SELECT item1, item2 FROM table1 
WHERE EXISTS (SELECT 1 FROM table2 WHERE table.field = table2.field)

在具有强大查询优化器的RDBMS中,它们应该是无法区分的,因为可以自动转换为另一个。显然MySQL尚未进入该联盟,JOIN优于相关的子查询。

答案 1 :(得分:0)

通常JOIN比子查询

更快

当子查询的结果集非常小时,子查询可能会更快。

这也取决于RDBMS优化。