自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 【MySQL·8.0·源码】subquery 子查询处理分析(二)

在中,已经介绍了 MySQL 子查询的语法树形式,并简单介绍了非相关 scalar 子查询的一些处理流程,本文将继续介绍更多子查询的处理流程。本文后续以 “分析(一)” 来代替 “【MySQL·8.0·源码】subquery 子查询处理分析(一)”假如对子查询不做任何优化处理,那么子查询应该怎么执行呢?先来看一个 IN 子查询显然,先执行子查询,将 t2 的所有 pk 都查询出来,然后以所有的 pk 作为查询条件,检索 t1 中满足条件的记录返回即可。再来看一个 Exists 子查询。

2024-02-27 18:54:13 1101 1

原创 【MySQL·8.0·源码】subquery 子查询处理分析(一)

在 SQL 中,子查询属于 Nested Query 的一种形式,根据 Kim 的分类[1],Nested Query 即嵌套查询是一种 SQL-like 形式的查询语句嵌套在另一 SQL 中,SQL-like 的嵌套子句可以出现在 SELECT、FROM 和 WHERE 子句的任意位置。

2024-01-23 15:37:18 1002

原创 【MySQL·8.0·源码】MySQL 表的扫描方式

在进一步介绍 MySQL 优化器时,先来了解一下 MySQL 单表都有哪些扫描方式。单表扫描方法是基表的读取基础,也是完成表连接的基础,熟悉了基表的基本扫描方式,即可以倒推理解 MySQL 优化器层的诸多考量。基表,即数据库中的原始表,与之对应的是视图、物化临时表或其他形式的派生表(中间生成的)基表是直接存储实际数据的,在查询语法树中,一般叶子节点所对应的表为基表,MySQL 语法树大致结构可以参考MySQL 支持不同的存储引擎,以 InnoDB 举例,InnoDB 存储引擎采用的是。

2024-01-03 18:31:48 1292

原创 【MySQL·8.0·源码】MySQL 的查询处理

MySQL 的 Query 处理可以分为 Parse、Prepare(Resolve/Transform)、Optimize 和 Execute 几个阶段Parse词法扫描器将 SQL 语句字符串分解为 tokens,语法分析器将 tokens 组装成语法树的子树结构,并 Reduce 为基本查询结构,最终生成 SQL 语法解析数MySQL 语法解析树结构如PrepareOptimize代价评估,table access method 选择,最优 join order 选择。

2024-01-03 18:31:07 542

原创 【MySQL·8.0·源码】MySQL 语法树基础知识

我们都知道 SQL 语句经过时,识别扫描输入的 SQL 语句,将关键词、标识符、常量等分解转换成独立的 tokens,进一步在阶段根据语法规则检查 tokens 序列的结构并不断 shift 、reduce 构建成 SQL 语法解析树。在 MySQL 中,撇去解析树构建过程中的结构,最终生成语法树最重要的两个结构就是和对应用于描述查询表达式则对应用以描述查询规范或定义,表示一个SELECT主体部分,通常包括查询的各个组成部分,例如要选择的列、查询的表、过滤条件等。SQL 表达式可能是一条简单的。

2023-12-18 19:52:07 1293

原创 【MySQL·8.0·源码】MySQL 语法树结构

查询表达式由一个或多个查询块组成,多个查询块表示查询表达式有 UNION、INTERSECT、EXCEPT操作,或者利用查询块来描述子查询结构。从 LEX 可以定位到语法树中最外层的查询表达式和第一个查询块,也可以直接遍历所有的查询块。然后根据以上查询块和查询表达式的关系,从最外层的查询表达式的第一个查询块进行查询处理。查询表达式中的查询块形成一个树形结构,表达了嵌套形式的查询操作。一个查询块对应着一条基本的 SELECT 语句的语法结构。本文代码版本为:MySQL 8.1.0。

2023-12-18 13:04:04 1179

原创 Linux 上使用 JDB 调试 JAVA 程序

通过一个简单的调用 JDBC 连接到 MySQL 的 JAVA 示例小程序来演示在 Linux 上最基本的通过 JDB 调试 JAVA 程序的过程和基本操作。通过将这些路径添加到类路径中,Java 运行时可以找到所需的类和依赖项。通过设置这些选项,我们可以启用远程调试功能,并在指定的调试端口上进行调试。这只是一些最基本的 jdb 调试命令,还有更多高级的命令和选项可用于更复杂的调试场景。表示要连接的调试器的地址和端口。选项可以将 Java 运行时连接到远程调试会话,以便与正在运行的应用程序进行交互和调试。

2023-05-12 15:56:23 428

原创 MySQL·源码分析·null reject谓词

mysql/mariadb join 连接时,null-rejected 谓词处理;mysql/mariadb outer join 转换改写处理原则

2022-08-15 16:31:42 449

翻译 Orca: A Modular Query Optimizer Architecture for Big Data

概要数据管理系统中的分析查询处理的性能主要取决于系统查询优化器的表现。数据量的增加和对处理复杂分析型查询的兴趣促使 Pivotal 开始构建一个新的查询优化器。本文介绍了 Orca 的架构,一个新的适用于 Pivotal 所有数据管理产品的优化器,包括 Pivotal Greenplum 和 Pivotal HAWQ。Orca是一个全面的架构,将最先进的查询优化技术与自己的原创研究相结合,从而形成了一个模块化和可移植的优化器架构。除了描述整体架构之外,我们还强调了几个独特的特性,并介绍了与其他系统的性

2021-12-11 10:30:58 209

翻译 【优化器框架】Apache Calcite - 一种用于异构数据源查询优化处理的基础框架

概要Apache Calcite 是一支持多种开源数据处理系统,例如:Apache Hive,Storm,Flink,Druid 和 MapD,为其提供查询处理、优化和查询语言的基础框架。本文向广大的研究社区正式地介绍 Calcite,简要地介绍其历史演进,框架,特性,功能和使用模式。Calcite的框架包括一个内置上百条优化规则的、模块化的、并且可扩展的优化器,一个兼容处理各种查询语言的查询处理器,一个专为可扩展性而设计的适配器架构,以及支持各种异构数据模型和存储(关系型,半结构,流和地理数据)。这种灵

2021-12-07 15:59:20 2013 1

原创 MySQL MRR 索引检索优化之 key/rowid 排序

DS-MRRmrr function callsKey-Ordered Retrieval关键思想:如果 MRR 扫描类似于:tbl.key=value1 OR tbl.key=value2 OR ... OR tbl.key=valueN 那么将要查询的条件进行收集并且排序,例如: sort(value1, value2, .. valueN) 然后按照索引顺序进行索引检索,就会减少的索引页 page 的 fetch 操作。Rowid-Ordered Retrieval

2020-09-21 09:18:52 430

原创 MySQL 8.0 新增功能

MySQL 8.0 新增功能数据字典全新 Data Dictionary 设计摒弃了 server 层定义的 frm 文件和其他非事务表,使用了一组 InnoDB 表来保持数据字典,支持事务特性;MySQL Server 8.0 现在包含一个事务数据字典,用于存储有关数据库对象的信息之前的版本中,数据字典相关数据存储在元数据文件和非事务系统表中DDL 原子性原子 DDL 语句包含 data 数据字典更新,存储引擎操作,bin 日志写入到一个事务中,要么成功提交,要么回滚;详情;升

2020-09-21 09:15:18 488

原创 MySQL与MariaDB性能对比

MySQL与MariaDB性能对比环境参数配置性能MySQL 8.0.21 vs MySQL 5.7.31 vs MariaDB 10.4.6 sysbench 性能对比环境环境:server:CPU:Inter® Xeon® CPU E5-2650 v4 @ 2.20GHz (12CPUs- 48 Processor)磁盘:SSD-1.1TMem: 251GSys: CentOS Linux release 7.6.1810(Core)MySQL: 8.0.21MySQL:5.7.31

2020-08-28 18:06:33 2923

原创 MySQL 下载 — 各版本下载列表及说明

最新版本下载列表版本说明支持系统指南• MySQL Yum RepositoryYum 源软件安装包Red Hat Enterprise Linux / Oracle Linux / Fedora快速安装指南• MySQL APT Repositoryapt 源软件安装包Debian/ Ubuntu快速安装指南• MySQL SUSE Repo...

2019-12-09 10:06:51 1018

原创 MySQL的EXPLAIN执行计划详解

概述EXPLAIN 提供有关 MySQL 如何执行 SQL 语句的信息,也称执行计划。EXPLAIN 可以查看 SELECT,DELETE,INSERT,REPLACE 和 UPDATE 语句的执行计划。EXPLAIN 输出的每一行都是对应于 SELECT 语句中的一个表的信息。行信息对应的表的顺序也是 MySQL 在 SQL 语句执行过程中的顺序。MySQL 在处理 JOIN 时,都是使...

2019-10-24 13:21:13 250

原创 MySQL插件(二)源码分析-InnoDB储存引擎插件定义和初始化过程

InnoDB储存引擎插件定义和初始化过程InnoDB 储存引擎插件MySQL 插件初始化大致流程在MySQL中,储存引擎也是作为一种插件实现的,其插件类型为#define MYSQL_STORAGE_ENGINE_PLUGIN 1 /* Storage Engine */InnoDB 储存引擎插件而 InnoDB 作为 MySQL 的默认储存引擎,也是实现了功能最全面的储存引擎。在 My...

2019-10-20 21:11:10 846 1

原创 MySQL插件(一)介绍

插件简介插件类型加载和卸载插件简介在第一节中提到,MySQL 是支持动态可插拔的储存引擎体系架构。而储存引擎其实也是一种插件类型,所以在继续储存引擎的后续介绍之前,有必要先来了解一下MySQL的插件。可以从INFORMATION_SCHEMA.PLUGINS 或者 SHOW PLUGINS 可以获取到当前 MySQL 内部所有插件的详情。mysql> mysql> selec...

2019-10-20 14:41:53 2366 2

原创 MySQL如何创建自定义储存引擎(一)

MySQL自定义储存引擎 - Custom Storage Engine概述handlerton 和 handler概述MySQL server 是以模块化进行构建的。储存引擎 storage engine 维护了 MySQL 的 data 储存和 index 的管理。MySQL server 通过一系列 API 与 storage engine 进行交互。每一个 stoage engine...

2019-10-16 21:27:57 1522 1

原创 MySQL一条查询SQL的执行过程(源码分析)

MySQL一条SQL的执行过程(源码分析)说明:以下所有说明都以 MySQL 5.7.25 源码为例 ,存储引擎为InnoDB。一条简单的SQL:mysql> select * from t1;表 t1 的创建语句为:create table t1(a int, b int) engine = InnoDB;服务端处理过程mysqld 服务进程为每一个客户端...

2019-07-20 16:50:00 2401 4

原创 MySQL数据库中使用use来切换数据库之底层原理

MySQL源码分析之use database_name切换表空间切换表空间源码分析客户端流程服务端流程说明:以下所有说明都以 MySQL 5.7.25 源码为例 ,存储引擎为InnoDB。切换表空间mysql客户端登录之后,需要使用use database_name选取表空间并切换到具体的表空间下进行操作,否则会报错:使用前未使用use database_namemysql>...

2019-07-17 20:30:08 3231

原创 MySQL表frm文件解析

MySQL表frm文件解析MySQL .frm文件格式新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入MySQ...

2019-07-16 15:13:28 4583 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除