2023-06-07 stonedb-包含内连接外连接派生表in子查询和聚合-查询结果错误-分析问题的思路

news2025/1/11 12:41:16

摘要:

最近在处理stonedb的一个包含内连接包含内连接外连接派生表in子查询和聚合的查询出错的问题, 逻辑非常复杂, 包含的操作符非常多.

本文首先从顶层设计出发, 指出如何分析如此复杂的问题。

查询SQL:

SELECT
	B.company_id,
	'上划日' ud_type,
	2 sort_no,
	'合计' fiscal_date,
	DATE_FORMAT('2023-06-06', '%Y-%m-%d') fiscal_date,
	C.pl_amount
FROM
	C1FG_POOL A
INNER JOIN C1FG_PL_NODE B ON
	A.row_id = B.pool_id
LEFT JOIN (
		SELECT c.node_id,
		SUM(d.dr_amount) pl_amount
	FROM
		C1FG_POOL a,
		C1FG_PL_NODE b,
		C1FG_PL_ACCOUNT c,
		C1FG_PL_SUBSIDIARY d
	WHERE
		a.row_id = b.pool_id
		AND b.row_id = c.node_id
		AND c.row_id = d.account_id
		AND b.company_id IN (
                SELECT t1.row_id
            FROM
                C1MD_COMPANY t1,
                C1MD_COMPANY t2
            WHERE
                t1.sys_id = t2.sys_id)
	GROUP BY
		c.node_id) C ON
	B.row_id = C.node_id;

查询出错的SQL总体概览:

  1. 即使经过逻辑精简后的SQL,也依然十分复杂
  2. 总共涉及的表有7个之多
  3. 表之间的连接关系包括内连接和外连接
  4. 外连接的右表, 是一个派生出来的表
  5. 派生表中存在in的子查询
  6. 派生表中存在聚合

分析该复杂SQL的方法:

一. 通过debug模式下的trace日志分析查询执行的细节

2022-10-18 mysql-5.7-开启debug日志_mysql 开启debug日志_财阀悟世的博客-CSDN博客

二. 通过trace分析查询优化处理器的优化细节

2023-02-24 mysql-开启optimizer trace_财阀悟世的博客-CSDN博客

三. 查询优化的相关理论

  1. 代价计算
  2. 子查询优化的策略
  3. 外连接的优化场景和策略
  4. 内连接的优化场景和策略
  5. 聚合的优化策略

四. 查询执行的相关细节

  1. 查询树的元素
    1. select_lex, table, item, cond, field...
  2. 表连接相关的数据结构
    1. TABLE, JOIN_TAB, st_table_join...
  3. 查询执行的相关数据结构
    1. JOIN, QEP_TAB
  4. 查询优化的核心函数
    1. JOIN::optimize
  5. 查询执行的核心函数
    1. sub_select
    2. evaluate_join_record

一些草图:

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

输入java -version 命令行没反应的简单解决办法【亲测有效】

💧 记录一下今天遇到的 b u g \color{#FF1493}{记录一下今天遇到的bug} 记录一下今天遇到的bug💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 数据结构与算法…

qemu+buildroot+linux arm64操作系统虚拟化-宿主系统wsl2

文章目录 1.qemu2.buildroot配置编译 3.linux kernel下载交叉编译工具链 linux kernel 5.16配置内核config_kernel.shbuild_kernel.sh 4.启动虚拟机start_qemu.sh参数解释运行 环境: wls2、qemu8.2、buildroot、linuxkernel 1.qemu https://buildroot.org/download…

Python知识点:lambda 表达式

大家好,欢迎来到 Crossin的编程教室 ! Python 是一门简洁的语言,lambda 表达式则充分体现了 Python 这一特点。 lambda 表达可以被看做是一种匿名函数。它可以让你快速定义一个极度简单的单行函数。譬如这样一个实现三个数相加的函数&#xf…

学会使用perf性能分析工具(含移植到开发板)

文章目录 一、在ubuntu中使用apt包下载Perf二、使用源码安装Perf,并移植到arm-linux环境下三、使用perf四、Perf的功能介绍 系统:Ubuntu18.04系统 内核版本:5.4.0-150-generic(通过uname -r查看) 一、在ubuntu中使用ap…

Linux驱动系列-PWM驱动

转自:嵌入式系统研发 1.概述 本文主要讲述了Linux的PWM驱动框架、实现方法、驱动添加方法和调试方法。 示例Linux内核版本:6.2.8。 2.原理 PWM是Pulse-Width Modulation的简称,中文译作脉冲宽度调制。作为一种调制技术,PWM的…

SpringBoot实现异步调用的几种方式

一、使用 CompletableFuture 实现异步任务 CompletableFuture 是 Java 8 新增的一个异步编程工具,它可以方便地实现异步任务。使用 CompletableFuture 需要满足以下条件: 异步任务的返回值类型必须是 CompletableFuture 类型; 在异步任务中…

基于vasp计算材料红外与Raman光谱信息

使用方法一:获取材料raman活性信息 代码链接:VASP/Sibulk-VASP at master raman-sc/VASP GitHub 前置计算材料的振动频率和介电常数等,参考INCAR如下: SYSTEM Si_bulk ISTART 0 # From-scratch; job : 0-new 1-cont 2-same…

4-2 贪心算法的基本要素

博主简介:一个爱打游戏的计算机专业学生博主主页: 夏驰和徐策所属专栏:算法设计与分析 1.什么是贪心选择性质 贪心选择性质是一种在算法设计中经常使用的策略。它基于这样的思想:在每一步选择中,都选择当前看起来最优…

多篇论文入选ICASSP 2023,火山语音有效解决多类实践问题

近日由IEEE主办、被誉为世界范围内最大规模、也是最全面的信号处理及其应用方面的顶级学术会议ICASSP2023于希腊召开,该会议具有权威、广泛的学界以及工业界影响力,备受AI领域多方关注。会上火山语音多篇论文被接收并发表,内容涵盖众多前沿领…

superset db upgrade报错记录

superset db upgrade报错记录 报错1报错2报错3报错4报错5报错6成功了 报错1 (superset) [hyjhadoop102 ~]$ superset db upgradefrom markupsafe import soft_unicode ImportError: cannot import name soft_unicode from markupsafe (/opt/module/miniconda3/envs/superset/l…

git基本操作(笔记)

安装 查看是否安装成功 git --version配置用户名和邮箱 参数global表示全局配置,对所有仓库生效,system表示系统配置,对所有用户生效,省略是(local)表示本地配置,只对本地仓库有效。 git config…

奇安信 渗透测试(攻防类)一面复盘

奇安信 渗透测试(攻防类)一面复盘 1.你是哪里人2.你是做安全研发的,在qax这边除了这个红队的岗位还投递其他了吗3.看你研发做的比较多,为什么投递这个岗位4.给了一个具体的场景,问你做渗透测试的思路5.后渗透有了解吗&…

form-inserter 让你的表单插入更轻松

挖SRC的时候经常需要向 input 框或者textarea 框中插入一些payload,但是遇到某个网页需要插入的输入框很多或者payload 很复杂的时候,就需要多次复制粘贴,过程比较繁琐。 例如如下两种情况: 情况1:输入框很多 情况2:…

C语言趣味小游戏---利用二维数组实现三子棋游戏

学习了C语言中的二维数组,本照着学以致用的原则,现在利用对二维数组的操作来实现一个简单版的三子棋游戏。 三子棋其实我们都玩过,在我们这边又叫"一条龙"。就是一个九空格,下棋的双方依次在九个空格里面下棋&#xff0…

Jetson Nano之ROS入门 - - SLAM之Gmapping建图与路径规划

文章目录 前言一、Gmapping建图算法1、Gmapping算法流程原理2、Gmapping建图实操 二、AMCL蒙特卡洛定位1、自适应蒙特卡洛定位算法原理2、AMCL定位实操 三、move_base路径规划1、路径规划算法简介2、代价地图简介2、move_base路径规划实操 总结 前言 SLAM(Simultane…

Water valve concept流水法判断D-separation

Water valve concept流水法判断D-separation 文章目录 Water valve concept流水法判断D-separationD-separation流水法判断例子 D-separation 概率图模型中的D-separation是一种刻画随机变量之间条件独立性的方法。具体来说,给定一个概率图模型,如果其中…

Yarn【关于配置yarn-site.xml的注意事项】

注意事项 配置文件的<description>表签内容可以删&#xff0c;不影响配置文件的读取。最重要的<name><value>标签中间的内容一定要好好检查&#xff0c;尤其是在复制别人的配置信息的时候格外要注意&#xff1a;value中有没有空格、有没有因为你打开工具的不…

【IT经验实战】教你如何真正有效地学习一门IT技术

前言 在写博客之前&#xff0c;我在CSDN中搜寻了一下 “如何系统学习一门it技术” &#xff0c;琳琅满目&#xff0c;有些借鉴了ChatGPT生成的内容&#xff08;几乎一模一样&#xff09;、有些写得比较笼统没有针对性、有的偏向理论难以实操。 下文内容着实强调求学经历和过程…

SpringCloud组件介绍

一&#xff1a;什么是微服务&#xff08;Microservice&#xff09; 微服务英文名称Microservice&#xff0c;Microservice架构模式就是将整个Web应用组织为一系列小的Web服务。这些小的Web服务可以独立地编译及部署&#xff0c;并通过各自暴露的API接口相互通讯。它们彼此相互协…

小作文--流程图(练习1)

【【雅思写作】带你打破小作文‘流程图’的传说】 https://www.bilibili.com/video/BV1QP411Q7Gh/?share_sourcecopy_web&vd_source78768d4ae65c35ff26534bbaa8afc267 雅思小作文-流程图, 看这一篇就够了! - 冯凯文的文章 - 知乎 https://zhuanlan.zhihu.com/p/35868880 …