我有一个疑问:
select *
from tableA
where colA > (select max(colA) from tableB)
与以下相比,这非常慢:
select *
from tableA
where colA > 10
colA 上的 tableA 和 tableB 都有索引。
如果重要的话,这个问题发生在Postgres中,一个独立于数据库的解决方案会很好。
优化查询可能很复杂,并且高度依赖于数据库架构、数据分布、索引等的具体情况。但是,这里有一个额外的建议,可能有助于使用 CTE(通用表表达式)提高性能
WITH MaxValueB AS (
SELECT max(colA) AS maxColA FROM tableB
)
SELECT *
FROM tableA
WHERE colA > (SELECT maxColA FROM MaxValueB);