postgreSQL随笔-总结一下PG的查询流程

2024-06-19 20:08

本文主要是介绍postgreSQL随笔-总结一下PG的查询流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

客户端发起查询请求

客户端与服务进程进行通信中有两个关键的共享缓冲区:

  • PgRecvBuffer:存储服务端接收请求,默认8192字节
  • PqSendBuffer:存储服务端发送请求,默认8192字节
    在这里插入图片描述
    客户端与服务进程之间存在两种连接方式:网络连接与本地访问;根据这两种不同的连接方式,PG可以获取客户端发送的请求,这时查询的命令将会被保存到inBuf里。
static int
ReadCommand(StringInfo inBuf)
{int			result;if (whereToSendOutput == DestRemote)result = SocketBackend(inBuf);elseresult = InteractiveBackend(inBuf);return result;
}

PostgrsSQL本身是一种基于消息的协议用于服务进程与客户端之间的通信,即通信的基本单元就是消息流。这里主要将消息分为六种:

  • 启动消息
  • 简单查询
  • 扩展查询
  • 函数调用
  • 取消请求
  • 终止

其中我们用的比较常见就是curd 简单查询,用字符’Q’表示,也就是函数ReadCommand的返回值,而inBuf则保存了查询命令。在获取了查询请求后,通过exec_simple_query来进行查询。

浅析查询流程

在这里插入图片描述

词法分析

编译器必须检查查询字符串(以纯文本形式到达)是否为合法语法。如果语法正确将建立一个分析树并返回之,否则将返回一个错误。 语法分析器和词法分析器使用著名的Unix工具bison和flex实现。

词法分析器定义在文件scan.l中,并负责识别标识符、SQL关键词等。对于找到的每一个关键词或标识符将生成一个记号并返回给语法分析器。

语法解析

遍历词法分析过程生成的分析树,将他们转化成同一的数据结构Query,如果是查询命令则对查询进行重写。

优化器

对于输入的Query生成多个查询计划plan,对于一个sql来说可以生成至少一个查询计划

执行器

按照查询计划生成最终的查询结果。

这篇关于postgreSQL随笔-总结一下PG的查询流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076024

相关文章

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN