跨表联接时(如下例所示),联接表或联接仅包含所需列的子查询之间是否存在效率差异?
也就是说,这两个表的效率有区别吗?
SELECT result
FROM result_tbl
JOIN test_tbl USING (test_id)
JOIN sample_tbl USING (sample_id)
JOIN (SELECT request_id
FROM request_tbl
WHERE request_status='A') USING(request_id)
对比
SELECT result
FROM (SELECT result, test_id FROM result_tbl)
JOIN (SELECT test_id, sample_id FROM test_tbl) USING(test_id)
JOIN (SELECT sample_id FROM sample_tbl) USING(sample_id)
JOIN (SELECT request_id
FROM request_tbl
WHERE request_status='A') USING(request_id)
最佳答案
确定的唯一方法是在打开跟踪的情况下运行两者,然后查看跟踪文件。但很可能它们会受到相同的对待:优化器会将所有内联 View 合并到主语句中,并得出相同的查询计划。
关于oracle - 表连接效率问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/853495/