如何让外层的查询条件不下推到内层,部分场景提前下推会导致查询变慢

【详述】
类似下面的sql,内层sql直接执行很快,加上外层的where条件后,看执行计划外层过滤也下推到了内层,查询变慢很多,如何先执行内层查询再过滤数据

select
*
from
(
select
distinct if(
event_code = ‘success’,
cast(
json_extract_scalar(message_content, ‘$.member_id’) as bigint
),
member_id
) as member_id,
from
table
where
其他条件
)
where
member_id is not null
and member_id <> 0

这个简单

select * from (
select a,b,c 
from tablex
where a = xxx -- 可以过滤大量谓词
limit 100000000000 -- 给一个大的 limit
) 
where slow_predicate = xxx

骚操作 :sweat_smile:,这种执行计划有办法优化吗,业务使用的时候,都不知道为什么慢,看执行计划才能看出来原因

还在优化,这不是一个总是正向的改写,会稍微复杂些

:+1:

能提供一个参数控制是否下推也挺好,这样就不用改sql了

尝试设置 enable_column_expr_predicate=false 来看是否能满足你的要求

这个参数试了一下没效果,加limit能解决问题