PostgreSQL底层对查询类语句的处理

postgresql——底层对查询类语句的处理(优化),以及执行计划生成策略 理论先行 postgresql执行SQL语句时,首先通过语法分析模块(词法分析、语法分析(语法树)、语义分析(查询树)),然后通过查询优化器进行逻辑优化和物理优化,生成计划树,就是执行计划。 逻辑优化: 是基于规则的优化,对SQL进行重写。比如谓词下推,连接顺序交换等。 物理优化:是基于代价的优化,数据库建立了各种代价模型,对各种物理路径进行代价的评估,选择一条代价相对较低的执行。物理路径包括扫... 阅读详情

查询类语句的处理

        postgresql对查询类语句的优化过程,除了语法分析过程和词法分析过程以外还需进行:

1、将原始语法树转换为查询语法树;

2、以查询语法树为基础对其进行逻辑优化;

3、对查询语句进行物理优化;

4、查询计划创建等过程。

 

具体流程介绍

        根据本人知识沉淀以及相关资料的查阅,以下提供各位本人对查询类语句优化过程的理解

(1)将原始语法树转换为查询语法树

        经过词法分析和语法分析后,postgresql需要将原始语法树转换为查询语法树并在转换过程中进行语义方面合法性检查。例如基表的有效性检查和目标列的有效性检查及展开等。transformStmt函数依据查询语句的类型进行相应语法树到查询书的转换工作。

(2)基于规则的查询改写

        经过转换操作后,查询引擎获得Query类型的查询树,然后依据系统中定义的规则对查询树进行依据规则的改写操作。例如视图的改写等。

(3)查询逻辑优化

        逻辑优化阶段中,会对所有导致查询变慢的语句进行等价变换,依据数据库理论中给出的经典优化策略:选择下推,从而尽可能减少中间结果的产生。即所谓的先做选择操作,后做投影操作。

        例如,对“in”和“exists”的处理,则是将查询变为“join”连接查询,使得子链接中的子查询有机会与父查询语句进行合并优化。

(4)查询物理优化

        该阶段最主要的任务是选择出一条查询代价最优的查询访问路径。依据逻辑优化阶段所得的查询语法树为基础,构建一条最小查询访问代价的查询路径。

(5)创建查询计划

        在成功获得一条查询访问路径后,查询引擎会以此为蓝本创建对应的查询计划。

PostgreSQL读写分离架构设计与实践指南 PostgreSQL读写分离架构通过主从节点分工显著提升数据库性能,将70-90%的读请求分流到只读副本。核心采用WAL日志传输机制实现数据同步,提供异步/同步两种复制模式。主流实现方案包括客户端路由、中间件代理及云托管服务,各具特点。最佳实践需结合业务场景,金融系统适合半同步复制,电商平台可采用多数据源配置。关键优化策略涵盖延迟监控、智能负载均衡和安全控制,并需建立完善的监控告警体系。云原生趋势下,KubernetesOperator部署模式正成为新方向。 阅读详情

相关推荐

【0021】深入理解 Postgres内核 事务系统架构

文章目录1. PostgreSQL事务系统1. 1 示例演示 1. PostgreSQL事务系统 PostgreSQL的事务系统是一个三层系统。底层实现了低级事务(Low-Level Transactions)和子事务(SubTransactions),在子事务和低级别事务之上是主循环的控制代码,后者又实现了用户可见的事务和保存点(SAVEPOINT)。 中间层的代码由postgresql .c在处理每个查询之前和之后,或者在检测到错误之后调用: StartTransactionCommand() Com

Postgres 数据库内核开发工程师 723

【数据库学习】Postgres(PG)原理及底层实现

事务(transaction):是用户定义的一组数据库操作,要么全做要么全不做,失败即回滚。保存点(savePoint)在一个大的事务中,可以把操作过程分成几个部分,第一个部分执行成功后可以建一个保存点,若后面的部分执行失败,则回滚到此保存点,而不必回滚整个事务。事务的实现即:RDBMS采取何种技术确保事务的ACID特性?回退(rollback):撤销sql执行过程。事务管理可以管理insert、update、delete语句;不能回退create、drop操作。

午后阳光 9673

PostgreSQL12.2帮助手册v1.0.pdf

《PostgreSQL 12.2中文手册》是基于上一版本《PostgreSQL 11.2手册》翻译。对于使用PostgreSQL的数据库的小伙伴来说非常不错的资料!

POSTGRESQL 底层存储原理探索

要想使用一种数据库,一般有两种方法,不懂先从底层的知识来,通过以前学到的数据库的知识对比,新数据库的底层知识,快速了解这种数据库,另外是从操作入手,不管底层知识,直接操作,从操作中体会新...

sql server的专栏 4395

ARM学习 | 紧耦合存储器 (TCM)

TCM 是一种专用的片上存储器,直接与处理器核心耦合。确定性访问:由于不涉及缓存替换或一致性管理,访问延迟固定。高带宽:TCM 通常通过专用总线连接处理器核心,可以提供更高的数据吞吐率。用户管理:TCM 的分配和管理完全由开发者控制,不依赖硬件缓存策略。ARM 处理器中的 TCM 通常分为ITCM(指令紧耦合存储器)和DTCM(数据紧耦合存储器),分别用于存储指令和数据。TCM 是 ARM 处理器中不可忽视的重要特性,在实时系统和高性能嵌入式应用中具有重要地位。

qq_43167806的博客 3329

LAN8720芯片硬件设计避坑指南:从晶振选择到PHY地址配置的5个关键细节

本文深入解析LAN8720以太网PHY芯片硬件设计的五个关键细节,涵盖晶振模式选择、PHY地址配置、复位电路设计、电源滤波与接口布线。重点阐述了REF_CLK Out与REF_CLK In两种时钟模式的配置逻辑与应用场景,提供了避免通信失败与信号完整性问题的实战方案,是嵌入式网络硬件开发的实用避坑指南。

i1j2k的博客 512

PostgreSQL数据库信号量机制— PGSemaphore底层原理

PGSemaphoreTryLock

肥叔菌的博客 1337

ORCA(动态避障)算法

A物体沿着向量v1和v2移动,刚好能和B擦肩而过,不会发生碰撞;若V1和V2的夹角再小一点的话就一定会发生碰撞。A的速度为V1,B的速度为V2,A对于B的相对速度(也就是我们把B看做静止,A的速度)就是V1-V2。,那么怎么判定A的速度向量是不是在碰撞区域内呢?这就需要用A相对于B的速度来判定。红线画出来的锥形区域就是A相对于B的。

u012861978的专栏 4768

PG postgresql原理基础数据结构总结(数据库内核分析)

是查询编译的第一个模块,包含词法分析、语法分析(生成分析树)和语义分析(得到查询树)三个部分。它将用户输入的SQL命令转换为查询树(Query结构)。词法分析和语法分析分别借助词法分析工具Lex和语法分析工具Yacc(flex)来完成各自的工作。pg_analyze_and_rewrite对分析树进行。和重写(pg_rewrite_query)。操作的开销最大,因此,查询优化要处理的问题。由于在整个查询执行过程中,在于如何计算最后的表连接路径。

u011481289的博客 1533

Cesium实战:5分钟搞定离线地图与地形加载(附避坑指南)

本文详细介绍了Cesium在内网环境下的离线部署实战方案,重点解决了影像与地形数据的本地加载问题。通过逐步指导项目配置、本地瓦片与自定义地形数据的处理,并优化相机控制体验,帮助开发者快速构建安全、高效的三维地球应用,避免常见的401错误与加载失败陷阱。

weixin_30632089的博客 281

时序数据库避坑指南:TDengine与IoTDB在车联网场景的7个关键对比

本文对比了时序数据库TDengine与IoTDB在车联网场景下的7个关键差异,包括数据模型设计、边缘-云端协同能力、车规级函数库、存储压缩算法等。通过真实案例和性能测试,帮助企业在新能源汽车大数据处理中选择合适的时序数据库,优化存储成本和实时告警性能。

rust6ferris的博客 452

PostgreSQL查询引擎源码技术探索--读书笔记

目录 第1章 PostgreSQL概述 1.1 概述 作为数据库内核中的重要一环,查询引擎在整个数据库管理系统中起到了“大脑”的作用。查询语句是否以最优的方式来执行等均与查询引擎有着密不可分的联系;不同的数据库对同一条查询语句的执行时间各不相同,有快有慢。究其原因,除了存储引擎之间的差别,查询引擎生成的查询计划和执行计划的优劣直接影响数据库在查询时的性能表现。不同的查询引擎产生的查询计划千差万别,表现在查询效率上也千差万别。 作为连接服务器层(ServerFramework)与存储引擎层(Stora

junerli的博客 2147

TCP协议中ARQ自动重传的三种实现方式对比(含SACK详解)

本文深入解析TCP协议中ARQ自动重传的三种实现方式,包括停止-等待、回退N步和选择重传协议,特别详细介绍了SACK机制的工作原理和优势。通过对比分析各协议的效率、复杂度和适用场景,为网络通信中的可靠性传输提供了实用的选型指南。

weixin_30776273的博客 461

PostgreSQL 慢查询优化:先读执行计划,再改索引

没有执行计划就改索引,很容易加出一堆低收益索引,拖慢写入和膨胀表体积。估算偏差很大时,不一定是缺索引,也可能是统计信息过旧或字段相关性太强。找高耗时 SQL,再用执行计划确认瓶颈,最后决定是改 SQL、补索引、更新统计信息还是做表结构调整。能降低建索引对写入的阻塞,但执行时间更长,且不能放在普通事务块里。不是所有新索引都会被优化器选择,过滤条件选择性差时,顺序扫描可能仍然更便宜。,更合适的是复合索引,而不是分别给三个字段建单列索引。例如对字段做函数计算、隐式类型转换、前置模糊匹配,都会影响索引使用。

weixin_67153745的博客 540

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的生活垃圾检测与分类系统(Python+PySide6界面+训练代码)

随着城市化进程的加速和人口增长,生活垃圾管理已成为现代城市面临的重要挑战。传统的垃圾处理方法效率低下且成本高昂,急需智能化解决方案。本文详细介绍了基于YOLO系列算法(特别是YOLOv8)的智能生活垃圾检测与分类系统,该系统能够实时识别和分类多种生活垃圾,为智能垃圾处理和回收提供技术支持。系统包含完整的数据集构建、模型训练、评估和可视化界面,并提供了完整的实现代码。

YOLO 116

定位教程7---旋转中心标定之方法二

手算相机相对机器人关系

Quintin 6230

Postgresql性能优化 (一)

公司里面新买了两台服务器,用pgpool做同步。postgresql用8.4版本,请了外面的公司做性能优化。结果也就只是调整postgresql.conf文件里面参数而已。服务器是36G内存,Dua...

cnma55226的博客 543

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Supabase:开源BaaS平台,PostgreSQL驱动的全栈开发利器

在云原生和敏捷开发成为主流的今天,后端即服务(BaaS)平台正深刻改变着应用开发模式。这类平台通过将数据库、认证、存储等通用后端能力抽象为API服务,让开发者能聚焦业务逻辑,极大提升了开发效率。其技术原理在于,以云原生架构为基础,提供托管的数据库实例、预构建的微服务模块以及统一的访问接口,从而简化了基础设施的运维复杂度。从技术价值看,BaaS不仅降低了全栈开发的门槛,使前端开发者和独立开发者也能快速构建功能完整的应用,还通过内置的安全策略和自动扩展能力,保障了应用的稳定与安全。在实际应用场景中,无论是快速验

weixin_34280237的博客 395

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Python连接数据库将结果转换为DataFrame(列名和表字段一致)

很多时候,我们用Python处理数据,需要连接到Mysql、Postgresql等数据库,获取表数据,再构建pandas的DataFrame进行进一步处理。但是查询数据库结果集是没有表字段名称的,我们希望构建的DataFrame的列名和表字段一样。 直接上代码 这里以Postgresql数据库为例,Mysql数据库差不多,其他的自行改造。 先封装一个查询类,查询返回的结果是一个字典,head是表列...

#include 4241

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Postgresql性能优化 (三)

查询类:shared_buffers参数 大家都很熟悉的参数吧,共享内存的大小当然是越大越好啦。先别急,再仔细想想。读数据时: 数据库先在共享内存里查找,找不到的话,再检索磁盘。检索磁盘时先查OS的缓存,找不到的话才会实际扫...

cnma55226的博客 170

PostgreSQL 10.0 preview 性能增强 - 推出JIT开发框架(朝着HTAP迈进)

标签 PostgreSQL , 10.0 , HTAP , 动态编译 , JIT , LLVM , 表达式 , 函数跳转 背景 数据库发展了几十年,出现了很多产品,有面向OLTP(在线事务处理)的,有面向OLAP(在线分析)的。 虽然两个场景各有需求特色,但是企业需要为其需求买单,因为目前很少有产品可以同时满足在线处理和在线分析的需求。 比如一家企业...

weixin_33932129的博客 218

LangGraph:构建持久化智能代理的底层框架解析

在AI应用开发中,智能代理需要处理复杂的工作流和持久化状态管理。LangGraph作为一个轻量级的底层编排框架,通过有状态工作流引擎和消息传递机制,解决了传统方案在状态持久化和架构复杂度上的痛点。其核心原理包括持久化状态对象、消息队列和检查点机制,支持自动恢复和人工干预。技术价值体现在提升开发效率、增强系统可靠性和支持复杂业务场景。应用场景涵盖客服对话代理、长期运行任务等需要状态管理的AI系统。LangGraph已被Klarna、Replit等公司用于生产环境,结合Redis、RabbitMQ等组件实现高性

weixin_33743880的博客 507

【Hive】十一、Hive SQL 底层执行过程:编译、任务生成与 YARN 调度流程

梳理 Hive SQL 从客户端提交、HiveServer2 接收、Driver 编译优化,到生成 MapReduce 并提交 YARN 调度执行的完整流程。

qq_46126258的博客 329

MySQL 存储过程与 PL/pgSQL:数据库内过程语言的特性、实践与选型

MySQL存储过程与PL/pgSQL是两种主流数据库过程语言,分别针对不同场景优化。MySQL存储过程语法简洁,适合轻量级批量操作和简单事务,但在复杂逻辑和调试方面存在局限。PL/pgSQL功能更全面,支持复杂数据类型、精细流程控制和异常处理,适合企业级应用,但学习曲线陡峭。两者核心价值在于将数据密集型逻辑下沉到数据库层,减少网络交互损耗。选型应基于数据库生态和业务复杂度,同时遵循代码规范、性能优化和安全性控制等最佳实践。未来趋势将聚焦云原生适配和应用层协同,形成更合理的分工模式。

bulita great world 1023

Spring JdbcTemplate批量操作实战:原理、性能优化与避坑指南

在Java后端开发中,数据库操作是系统性能的关键瓶颈之一。其核心原理在于通过减少网络往返次数和事务开销来提升效率,这通常涉及JDBC批处理机制。从技术价值看,高效的批量操作能显著降低数据库连接压力、减少锁竞争时间,并提升数据处理吞吐量,这对于高并发、大数据量的业务场景至关重要。在实际应用场景中,无论是用户状态同步、商品信息入库还是日志批量处理,掌握正确的批量更新与新增技术都能带来数量级的性能提升。本文聚焦于Spring JdbcTemplate的批量操作,深入解析其底层机制、参数配置如`rewriteBat

weixin_34406086的博客 446

SpiderFoot Web UI生产级部署:从数据库调优到安全加固的完整指南

在网络安全和开源情报(OSINT)领域,自动化侦察工具是提升效率的关键。其核心原理在于通过集成多种扫描模块,对目标进行多维度信息收集,从而快速构建攻击面画像。这类工具的技术价值在于将复杂的手动侦察过程自动化、系统化,广泛应用于渗透测试、漏洞评估和威胁情报收集等场景。然而,当工具从命令行模式转向Web UI部署时,往往会面临稳定性、性能和安全的严峻挑战。本文聚焦于SpiderFoot这一流行OSINT工具,针对其Web UI模式在生产环境中常见的数据库连接池耗尽、扫描任务卡死等痛点,深入解析从数据库选型与迁移

weixin_33676492的博客 485
上一篇: RocketMQ 发送/接受消息
下一篇: Intellij IDEA——Git相关功能(简介)
Walter Sun
博客等级 码龄9年 1726粉丝 288原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Walter Sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值