openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错

文章目录

    • openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错
      • 210.1 谓词下推引起的查询报错
        • 210.1.1 问题现象
        • 210.1.2 原因分析
        • 210.1.3 处理办法

openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错

210.1 谓词下推引起的查询报错

210.1.1 问题现象

计划中出现谓词下推时,按照SQL标准中的查询执行顺序本不应该报错,结果执行出错。

openGauss=# select * from tba;a 
----12
(2 rows)openGauss=# select * from tbb;b 
----11
(2 rows)openGauss=# select * from tba join tbb on a > b where b > 0 and sqrt(a) > 1;
ERROR: cannot table square root of a negative number

按照SQL执行标准流程: 1、执行FROM子句,能够保证所有数据满足a > b。 2、执行WHERE子句中b > 0,若结果为true则能够推导出a > 0,并继续执行;若false则结束,后面的条件被短路,不会执行。 3、执行WHERE子句中sqrt(a) > 1

但是实际却报错入参为负值。

210.1.2 原因分析
openGauss=# explain (costs off) select * from tba join tbb on a > b where b > 0 and sqrt(a) > 1;QUERY PLAN            
----------------------------------
Nest loopJoin Filter: (a > b)-> Seq Scan on public.tbaFilter: (sqrt(a) > 1)-> Materialize-> Seq Scan on public.tbbFilter: (b > 0)
(7 rows)

分析计划可知,原本a > b, b > 0, sqrt(a) > 1的三个条件,被拆分下推到了不同的算子之中,从而并非按顺序执行. 且当前的等价类推理仅支持等号推理,因此无法自动推理补充出a > 0。 最终查询报错。

210.1.3 处理办法

谓词下推可以极大的提升查询性能,且此种短路、推导的特殊场景,在大多数数据库优化器下都没有过多考虑,因此建议修改查询语句,在相关的条件下手动添加a > 0

openGauss=# select * from tba join tbb on a > b where b > 0 and a > 0 and sqrt(a) > 1;a | b 
---+---2 | 1 
(1 row)openGauss=# explain (costs off) select * from tba join tbb on a > b where b > 0 and a > 0 and sqrt(a) > 1;QUERY PLAN              
--------------------------------------
Nest loopJoin Filter: (a > b)-> Seq Scan on public.tbaFilter: (a > 0 and sqrt(a) > 1)-> Materialize-> Seq Scan on public.tbbFilter: (b > 0)
(7 rows)

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/438930.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用javadoc生成API文档

本篇介绍怎么用javadoc生成API帮助文档 安装javadoc插件,然后重启ide 点这里 加上 -encoding UTF-8 生成的文档 这样注释到位了API文档就到位了

【行业应用-智慧零售】东胜物联餐饮门店智能叫号解决方案,为企业智能化升级管理服务

随着科技的不断进步,物联网设备已经广泛应用于各行各业,包括餐饮业。在餐饮门店的线下运营过程中,叫号系统是一项重要的设备需求。传统的叫号方式往往会消耗大量的人力和时间,而物联网技术为餐饮行业提供了一种更高效、智能化的解…

微博怎么把客户引流到私域?(引流技巧)

微博 1)背景banner图 在微博主页顶部的背景图里,可以引导添加个人微信、公众号等信息,通常配合福利引导用户添加。 2)个人简介 微博中比较常见的引流方式,可以直接在简介区内留下微信号、公众号名称、邮箱等信息&#…

shell - 正则表达式和grep命令和sed命令

一.正则表达式概述 1.正则表达式定义 1.1 定义 使用字符串描述、匹配一系列符合某个规则的字符串 1.2 了解 普通字符: 大小写字母、数字、标点符号及一些其它符号元字符: 在正则表达式中具有特殊意义的专用字符 1.3 层次分类 基础正则表达式扩展正…

建筑效果图渲染制作周期是多久

建筑效果图的渲染制作周期会根据多种因素而变化,包括项目的复杂性、渲染的详细程度、分辨率要求、场景中的元素数量和复杂度、以及项目所需的修改和迭代次数等。 通常,简单的建筑效果图可能在几个工作日内完成,而大型或高度复杂的项目可能需要…

【硬件产品经理】避免硬件产品失败 | 技术维度

目录 简介 技术维度一:低估产品开发 技术维度二:低估规模生产的复杂性 技术维度三:测试不足 技术维度四:产品太复杂 技术维度五:对客户承诺太高 推荐内容 简介 这节内容主要从技术维度来谈谈避免硬件产品失败这…

网络防御安全知识(第二版)

安全策略 传统的包过滤防火墙 --- 其本质为ACL列表,根据数据报中的特征进行过滤,之后对比规制, 执行动作。 五元组 --- 源IP, 目标IP,源端口, 目标端口,协议 安全策略 --- 相较于ACL的改进之…

【React教程】(1) React简介、React核心概念、React初始化

目录 ReactReact 介绍React 特点React 的发展历史React 与 Vue 的对比技术层面开发团队社区Native APP 开发 相关资源链接 EcmaScript 6 补充React 核心概念组件化虚拟 DOM 起步初始化及安装依赖Hello World React React 介绍 React 是一个用于构建用户界面的渐进式 JavaScrip…

【C/C++ 03】堆排序

堆排序是选择排序算法的进阶,也就是通过二叉树节点存储数组,并通过root节点存储最值与二叉树最后一个节点进行交换完成排序,降低了时间复杂度。在大数据时代,堆排序常用于处理Top-K问题。 排序对象:数组时间复杂度&am…

浅谈隔离放大器

浅谈隔离放大器 定义:隔离放大器是将输入的电量信号或物理量信号通过一种技术手段处理后,隔离输出一组模拟量信号,这组模拟量信号是以标准的4-20mA/0-20mA/0-10mA/0-10V/0-5V/1-5V/2-10V/0-2.5V/0-20mA/0-10mA/0-10V/0-100mV/0-5V等信号,以便控制系统及仪器仪表设备…

ElasticSearch重建/创建/删除索引操作 - 第501篇

历史文章(文章累计500) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 E…