重构 SQL 以使查询规划器能够有效地使用子查询的结果

问题描述 投票:0回答:1

我有一个疑问:

select * 
from tableA 
where colA > (select max(colA) from tableB)

与以下相比,这非常慢:

select * 
from tableA 
where colA > 10

colA 上的 tableA 和 tableB 都有索引。

如果重要的话,这个问题发生在Postgres中,一个独立于数据库的解决方案会很好。

sql postgresql sql-execution-plan query-planner
1个回答
0
投票

优化查询可能很复杂,并且高度依赖于数据库架构、数据分布、索引等的具体情况。但是,这里有一个额外的建议,可能有助于使用 CTE(通用表表达式)提高性能

WITH MaxValueB AS (
    SELECT max(colA) AS maxColA FROM tableB
)
SELECT * 
FROM tableA 
WHERE colA > (SELECT maxColA FROM MaxValueB);
© www.soinside.com 2019 - 2024. All rights reserved.