暂无图片
select count(*) 的数据量和 select * 的数据量不一致? 颠覆三观。请求解答。
我来答
分享
小蚂蚁
2022-08-19
select count(*) 的数据量和 select * 的数据量不一致? 颠覆三观。请求解答。

 --- databbase  : 12.1.0.2.0
select count(*) from (select * from xxx where xxx ) -- 44046 行

with tmp as (select * from xxx where xxx )  select count(*) from  tmp -- 33条。

select count(*) from (select * from xxx where xxx and xxx is not null ); -- 33 行
select * from xxx where xxx ; -- 33 行
select * from xxx where xxx and xxx is not null; -- 33 行





我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
DarkAthena

先用不带 is not null的这个子查询,create table as一个表出来,再用这个表实验一下。因为没看到这个sql的全貌,不确定是否有其他因素引起。

暂无图片 评论
暂无图片 有用 0
打赏 0
小蚂蚁
题主
2022-08-19
是这样的,我看了下 2条sql的执行计划。不加 is not null 。过滤条件少一个表 ,也就是 xxx is not null 这个表的字段。 加上is not null ,就会多出一个过滤条件 filter(TO_DATE("T"."ORDERENDSAVETIME",'yyyy-MM-dd hh24:mi:ss')<=TO_DATE(' 2022-08-01 23:59:59', 'syyyy-mm-dd hh24:mi:ss') AND "T"."ORDERENDSAVETIME" IS NOT NULL)
小蚂蚁

是这样的,我看了下 2条sql的执行计划。不加 is not null  。过滤条件少一个表 ,也就是 xxx is not null 这个表的字段。 加上is not null ,就会多出一个过滤条件

 filter(TO_DATE("T"."ORDERENDSAVETIME",'yyyy-MM-dd hh24:mi:ss')<=TO_DATE(' 2022-08-01 23:59:59', 'syyyy-mm-dd hh24:mi:ss') AND "T"."ORDERENDSAVETIME" IS NOT NULL) 

暂无图片 评论
暂无图片 有用 0
打赏 0
赵勇

最好是搞个可以展现的测试数据,并提供可以复现问题的完整SQL。这样分析起来会更有针对性。另外,完整的执行计划(带有谓词信息)可以先提供一下。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏