想象一下我有这个SQL查询,并且table2很大。
select product_id, count(product_id)
from table1
where table2_ptr_id in (select id
from table2
where author is not null)
SQL将首先执行子查询并将所有table2加载到内存中吗?例如,如果table1有10行,而table2有1000万行,那么先连接然后进行过滤会更好吗?或者DB足够聪明,可以在编写查询时对其进行优化。
答案 0 :(得分:1)
您必须EXPLAIN
查询才能知道它在做什么。
但是,如果将查询重写为,则在PostgreSQL中的查询性能可能会更好
SELECT product_id
FROM table1
WHERE EXISTS (SELECT 1
FROM table2
WHERE table2.id = table1.table2_ptr_id
AND table2.author IS NOT NULL);
然后PostgreSQL可以使用反联接,如果使用庞大的table2
,它可能会表现更好。
备注::查询中的count
对我来说没有任何意义。