前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原 对于postgresql and的简单猜想

原 对于postgresql and的简单猜想

作者头像
王果壳
发布2018-05-17 11:11:35
6550
发布2018-05-17 11:11:35
举报
文章被收录于专栏:王硕王硕

今天做了这样的实验,目的是验证where条件后的a_expr and a_expr的顺序。

准备:

sql语句为:

create table a1 (a int);

create table a2 (a int);

create table a3 (a int, b int);

create table a4 (a int, b int);

insert into a1 values (0),(1);//(被除数)(除数)

insert into a2 values (0),(0);// (被除数)(除数)

insert into a3 values (0,0),(1,1);// (被除数,测试数)(除数,测试数)

insert into a4 values (0,1),(1,0);// (被除数,测试数)(除数,测试数)

需要知道的:

select 4/0;

ERROR:  division by zero

select * from a1 where (4 / a > 2) and (a > 0);// (4 / a > 2) a有可能为0

返回1;

select * from a1 where (4 / a > 2) and (a > a-1);

ERROR:  division by zero

select * from a2 where (4 / a > 2) and (a > 0);

无返回;

select * from a3 where (4 / a > 2) and (b > 0);

返回1;

select * from a4 where (4 / a > 2) and (b > 0);

ERROR:  division by zero

由此猜想select查询应该是有一步优化,首先对a处理,这样会加快速度,减少重复运算,从而,没有进行/0操作。

当没有and时,执行计划会根据通过语法解析的节点复杂度进行重新排序,而有or的时候,就会按照手写的顺序。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档