openGauss 迁移到 GreatSQL:DataX 全流程实操指南

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

背景

某套业务系统当前使用 openGauss 数据库,后续计划切换到 GreatSQL。本文示例是使用 DataX 将 openGauss 的一张业务表的数据同步到 GreatSQL 的过程,主要包括 DataX 安装、JDBC 驱动准备、目标表结构转换、任务配置以及迁移结果校验。 实际的生产数据迁移时,需要结合表数量、数据量、停机窗口、约束和索引重建策略完整评估迁移耗时。

方案概述

DataX 是阿里巴巴开源的异构数据源离线同步工具。它将数据同步过程抽象为 Reader、Framework 和 Writer 三部分:Reader 从源端读取数据,Framework 负责调度和传输,Writer 将数据写入目标端。

本次迁移链路如下:

openGauss -> DataX Reader -> DataX Framework -> mysqlwriter -> GreatSQL

GreatSQL 完全兼容 MySQL 协议和 MySQL 语法,因此目标端使用 DataX 的 mysqlwriter 插件写入。源端 openGauss 与 PostgreSQL 生态有较高兼容性,但在 JDBC 驱动、数据类型和 SQL 语法上仍需要注意差异。

DataX 概述

什么是DataX

DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

DataX的设计

为了解决异构数据源同步问题,DataX 将复杂的网状的同步链路变成了星型数据链路,DataX 作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到 DataX,便能跟已有的数据源做到无缝数据同步。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

框架设计

DataX安装

DataX下载

下载地址 https://github.com/alibaba/DataX ,本次下载的datax_v202309版本

前置要求

本文示例环境使用 Linux 服务器,运行 DataX 前需要准备:

  • JDK:建议使用 JDK 1.8。
  • Python:DataX 启动脚本依赖 Python,Python 2 或 Python 3 均可,本文环境中 Python 2.7.5 和 Python 3.6.8 均已安装。
  • 网络连通性:DataX 所在服务器需要能够访问 openGauss 和 GreatSQL 的数据库端口。
  • 数据库权限:源端账号需要具备查询权限,目标端账号需要具备写入权限;如果使用 preSql、postSql,还需要相应的 DDL/DML 权限。

检查 Java 和 Python 版本:

[root@localhost ~]# java -version
java version "1.8.0_411"
Java(TM) SE Runtime Environment (build 1.8.0_411-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.411-b09, mixed mode)

[root@apsl ~]# python --version
Python 2.7.5

[root@localhost ~]# python3 --version
Python 3.6.8

下载并解压 DataX

本次下载的datax_v202309版本

将 datax.tar.gz 上传到服务器后,解压到 /opt 目录:

tar -zxvf datax.tar.gz -C /opt

解压后,DataX 主目录为 /opt/datax。

准备 openGauss JDBC 驱动

下载官方 openGauss JDBC 驱动 ,并将 openGauss 驱动放入 postgresqlreader 目录

wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/3.0.0/x86/openGauss-3.0.0-JDBC.tar.gz 
tar -zxvf openGauss-3.0.0-JDBC.tar.gz 
cp openGauss-3.0.0-JDBC.jar plugin/reader/postgresqlreader/libs/

运行 DataX 自检

DataX 安装包自带 job.json 示例,可以先用它验证 DataX 能否正常启动:

python /opt/datax/bin/datax.py /opt/datax/job/job.json 
 

2026-05-21 14:35:49.173 [job-0] INFO  JobContainer - 
任务启动时刻                    : 2026-05-21 14:35:39
任务结束时刻                    : 2026-05-21 14:35:49
任务总计耗时                    :                 10s
任务平均流量                    :          253.91KB/s
记录写入速度                    :          10000rec/s
读出记录总数                    :              100000
读写失败总数                    :                   0

自检任务能正常运行,说明 DataX基 础运行环境没有问题。后续还需要通过真实任务验证数据库连接、驱动加载和表结构映射是否正确。

迁移前准备

创建目标库、用户和表

迁移前需要先在 GreatSQL 中创建数据库、用户和目标表。openGauss 的建表语句不能直接在 GreatSQL 中执行,需要根据两端的数据类型、字符集、默认值、约束和索引进行转换。

本文示例表为 g_test_record

openGauss 建表语句如下:

CREATE TABLE g_test_record (
    pk_operate_record character(32) NOT NULL,
    operate_type nvarchar2(100) NOT NULL,
    host_media_count integer,
    pk_deploy_media character(32),
    pk_operator character(32),
    operate_time timestamp with time zone
)
WITH (orientation=row, compression=no);

GreatSQL 的建表语句

CREATE TABLE `g_test_record` (
  `pk_operate_record` char(32)   NOT NULL,
  `operate_type` varchar(100)   NOT NULL,
  `host_media_count` int DEFAULT NULL,
  `pk_deploy_media` char(32)   DEFAULT NULL,
  `pk_operator` char(32)   DEFAULT NULL,
  `operate_time` datetime DEFAULT NULL
) ENGINE=InnoDB;

常用字段类型转换关系如下:

openGauss字段类型GreatSQL字段类型
characterchar
nvarchar2varchar
integerint
smallintsmallint
intint
texttext
blobblob
numericdecimal
timestampdatetime、datetime(6)包含毫秒

编写配置文件

在 /opt/datax/job/ 目录下创建任务配置文件,例如 og2mysql_g_test_record.json。

下面配置以 gaussdbreader 为例。如果当前环境继续使用 postgresqlreader,只需要将 reader 的 name 改为 postgresqlreader,并确保 openGauss JDBC 驱动已经放到 postgresqlreader/libs 目录。

[root@apsl datax]# more job/og2mysql_g_test_record.json
{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "postgresqlreader",
                    "parameter": {
                        "username": "dbps",
                        "password": "*********",
                        "column": ["*"],
                        "where": "",
                        "connection": [
                            {
                                "jdbcUrl": [
                                    "jdbc:opengauss://192.168.1.100:15000/demo"
                                ],
                                "table": ["g_test_record"]
                            }
                        ]
                    }
                },
                "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                        "username": "root",
                        "password": "**********",
                        "column": ["*"],
                        "writeMode": "update",
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://192.168.1.100:8603/demo?useSSL=false&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull",
                                "table": ["g_test_record"]
                            }
                        ]
                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": 1
            }
        }
    }
}

配置说明:

配置主要分为 reader 和 writer,reader用于从 openGauss 读取数据,writer 将读取的数据写入到 GreatSQL,

username 是用户名、password 是密码,jdbcUrl 是数据库连接信息,table 是待迁移的表名,column 是指表的字段,本次迁移测试是在 GreatSQL 创建好表后,立刻进行数据迁移,使用的*,更稳妥的做法是显式列出所有字段。

如果源表或目标表后续发生字段顺序变化或者发生新增或者删除字段,导致openGauss和GreatSQL表结构不一致,会导致重新进行数据迁移时,迁移任务失败。

示例配置中 mysqlwriter 使用了 writeMode: “update”。该模式依赖目标表的主键或唯一索引触发 ON DUPLICATE KEY UPDATE。如果目标表没有主键或唯一索引,重复执行任务可能插入重复数据。若表存在业务主键,建议在目标表中补充主键约束。

特别说明:配置文件中postgresqlreader的驱动需要配置为openGauss

执行数据迁移

在 DataX 目录下执行任务:

python ./bin/datax.py job/og2mysql_g_test_record.json

任务执行完成后,关注输出中的记录数、失败数和错误日志。示例输出如下:

2026-05-21 16:03:26.788 [job-0] INFO  JobContainer - 
         [total cpu info] => 
                averageCpu                     | maxDeltaCpu                    | minDeltaCpu                    
                -1.00%                         | -1.00%                         | -1.00%
                        

         [total gc info] => 
                 NAME                 | totalGCCount       | maxDeltaGCCount    | minDeltaGCCount    | totalGCTime        | maxDeltaGCTime     | minDeltaGCTime     
                 PS MarkSweep         | 1                  | 1                  | 1                  | 0.024s             | 0.024s             | 0.024s             
                 PS Scavenge          | 1                  | 1                  | 1                  | 0.015s             | 0.015s             | 0.015s             

2026-05-21 16:03:26.788 [job-0] INFO  JobContainer - PerfTrace not enable!
2026-05-21 16:03:26.789 [job-0] INFO  StandAloneJobContainerCommunicator - Total 23 records, 2583 bytes | Speed 258B/s, 2 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.000s |  All Task WaitReaderTime 0.000s | Percentage 100.00%
2026-05-21 16:03:26.790 [job-0] INFO  JobContainer - 
任务启动时刻                    : 2026-05-21 16:03:15
任务结束时刻                    : 2026-05-21 16:03:26
任务总计耗时                    :                 10s
任务平均流量                    :              258B/s
记录写入速度                    :              2rec/s
读出记录总数                    :                  23    #迁移23条数据
读写失败总数                    :                   0

数据核对

迁移完成后,至少需要核对以下内容:

  • 源端和目标端记录数是否一致。
  • 主键或唯一键对应的数据是否一致。
  • 字符串字段是否存在截断、乱码或空格差异。
  • 时间字段的时区和精度是否满足业务要求。
  • 数值字段是否存在精度变化。

源端 openGauss 示例数据:

-[ RECORD 22 ]----+---------------------------------
pk_operate_record | 7dc11468b7734417abc6e1d0787e7a96
operate_type      | install
host_media_count  | 1
pk_deploy_media   | f8e443cbc4194bfab2a6a78b7ebe6063
pk_operator       | 1390a49407784921868a1a55116c351a
operate_time      | 2025-05-16 10:19:57.121+08
-[ RECORD 23 ]----+---------------------------------
pk_operate_record | 99911468b7734417abc6e1d0787e7a96
operate_type      | install
host_media_count  | 1
pk_deploy_media   | f8e443cbc4194bfab2a6a78b7ebe6063
pk_operator       | 1390a49407784921868a1a55116c351a
operate_time      | 2025-05-16 10:19:57+08

目标端 GreatSQL示例数据:

*************************** 22. row ***************************
pk_operate_record: 7dc11468b7734417abc6e1d0787e7a96
     operate_type: install
 host_media_count: 1
  pk_deploy_media: f8e443cbc4194bfab2a6a78b7ebe6063
      pk_operator: 1390a49407784921868a1a55116c351a
     operate_time: 2025-05-16 10:19:57
*************************** 23. row ***************************
pk_operate_record: 99911468b7734417abc6e1d0787e7a96
     operate_type: install
 host_media_count: 1
  pk_deploy_media: f8e443cbc4194bfab2a6a78b7ebe6063
      pk_operator: 1390a49407784921868a1a55116c351a
     operate_time: 2025-05-16 10:19:57
23 rows in set (0.00 sec)

示例中,目标端已查询到 23 条数据,与 DataX 任务日志中的读取记录数一致。需要特别注意的是,源端第一条记录包含毫秒和时区信息,写入 GreatSQL 的 datetime 字段后只保留到秒。毫秒精度没有在目标字段中保留,可以和业务进行确认,是否需要保留毫秒信息,如果需要保留毫秒信息,GreatSQL建表语句可以使用datetime(6)

总结

使用 DataX 可以完成 openGauss 到 GreatSQL 的离线数据迁移。迁移过程的关键点包括:

  • 源端 Reader 插件需要正确加载 openGauss JDBC 驱动。
  • GreatSQL 目标端可使用 mysqlwriter 写入。
  • openGauss DDL 不能直接复用到 GreatSQL,需要先完成数据类型、字符集、约束和索引转换。
  • writeMode: "update" 需要目标表存在主键或唯一索引,否则重复执行可能产生重复数据。
  • 时间、字符集、数值精度等字段需要在迁移后重点核对。

本文示例完成了单表 23 条数据的迁移验证,DataX 日志显示失败记录数为 0,目标端查询结果也能对应到源端数据。后续如果迁移多表或大表,建议补充全量校验、抽样校验、失败重跑策略和迁移窗口评估。

stc8g1k08硬件iic读取aht20温湿度及0.91寸oled显示 使用stc8g1k08读取aht20温湿度及0.91寸oled显示。 阅读详情

相关推荐

从Datasheet到可用的Verilog模块:手把手教你为N25Q128 SPI Flash写状态机驱动

本文详细介绍了如何从Datasheet到实现可用的Verilog模块,手把手教你为N25Q128 SPI Flash编写状态机驱动。文章涵盖SPI Flash的核心工作机制、数据手册解析方法、Verilog状态机设计实践以及调试与性能优化技巧,特别适合FPGA开发者和硬件设计工程师参考。

weixin_30596023的博客 176

GreatSQL:DataX 全流程实操指南

DataX 是阿里巴巴开源的异构数据源离线同步工具。它将数据同步过程抽象为 Reader、Framework 和 Writer 三部分:Reader 从源端读取数据,Framework 负责调度和传输,Writer 将数据写入目标端。GreatSQL 完全兼容 MySQL 协议和 MySQL 语法,因此目标端使用 DataX 的插件写入。源端 openGauss 与 PostgreSQL 生态有较高兼容性,但在 JDBC 驱动、数据类型和 SQL 语法上仍需要注意差异。什么是DataX。

he1w2HPtI的博客 271

3款 433MHz 收发模块对比:SYN480R vs RXB6 vs DL-TX19,实测卷帘门遥控距离

本文深度评测了3款433MHz收发模块SYN480R、RXB6与DL-TX19在卷帘门遥控距离、穿透性能和抗干扰能力等方面的表现。通过实测数据对比,分析了超外差、超再生和PLL锁相环技术的优劣,为智能家居和工业控制领域的无线遥控方案选型提供专业参考。

weixin_30700977的博客 393

MySQL 索引深入理解:B+ 树、二级索引、联合索引与查询优化

理解二级索引后,就可以理解回表了。SELECT *MySQL 的执行过程分为三个步骤。覆盖索引(Covering Index)并不是一种独立的索引类型,而是一种查询效果。SQL 查询需要的所有字段,都能够直接从某个索引中获得,不需要再访问聚簇索引获取其他字段。例如:因为user_id已经包含在二级索引中,所以 MySQL 可以直接返回结果。不需要回表。联合索引(Composite Index)是同时使用多个字段建立的索引。它的排序规则是:首先按照user_id排序。当user_id。

m0_64642997的博客 135

CELF(Cost-Effective Lazy Forward selection)具有成本效益的惰性前向选择算法

CELF(Cost-Effective Lazy Forward selection)算法解析      引言:在社交网络影响力最大化问题的求解过程中,我们往往需要去选择一些目标种子结点作为信息初始传播的源头。贪婪算法在传播效果上的解决可以达到影响的最大化,但是在时间复杂度上面显得确十分糟糕。为此CELF算法应势而生,CELF算法利用了函数次模性的特点,在第一轮选择种子结点时,计算网络中所有节点的边际收益,但将在之后的过程中,不再做网络节点边际收益的重复计算,这相对于传统的贪婪算法,将在时间上得到非常明显的

hahaxq的博客 2477

Cesium创建无人机视锥,同步视锥与鹰眼地图视角,实现视锥键盘控制。解决视锥初始化位置不准确问题等

本文描述了一个基于Cesium的3D视锥体可视化系统开发过程。系统实现了主视图与鹰眼视图的双屏联动,支持通过键盘控制视锥体的空间移动(WASD前后左右,Q/E旋转,C/Z升降),并实时同步更新两个视图。关键技术包括:1)基于主视图Scene创建Camera实现视锥体精确绘制;2)通过PerspectiveFrustum设置视锥参数;3)建立双视图的相机位置及视角同步机制。目前暂未实现视锥体far/near边界在鹰眼视图中的可视化,该系统可应用于无人机视角监控等三维场景交互需求。

coder_bin的博客 1590

MySQL 单点详解(14)

给定一条 SQL,联合索引的列该怎么排呢?

2401_88601046的博客 345

告别MRT!用ArcGIS脚本批量处理MODIS数据,从HDF到NDVI/ET成品图全流程(附Python代码)

本文详细介绍了使用ArcGIS Python脚本自动化处理MODIS数据的全流程,从HDF文件提取到生成NDVI/ET成品图。通过优化子数据集提取、智能镶嵌策略和投影转换等核心步骤,大幅提升处理效率,告别传统MRT工具的手工操作。附带的Python代码可直接应用于实际项目,特别适合批量处理大规模遥感数据。

weixin_30872337的博客 220

MySQL 的 REPEATABLE READ 到底能不能防幻读——从快照读、当前读到 Next-Key Lock

本文系统讲解 InnoDB 可重复读级别下的幻读问题:从三类读异常切入,剖析快照读依赖 MVCC、当前读依赖 Next-Key Lock 的双防线机制,用双会话实验复现幻读仍会出现的边界场景,并解释各数据库在幻读防护上行为分歧的根源。

大模型全栈工程师 · Thanks_ks 297

音频功放电路大全

作为硬件工程师,特别是做纯粹模拟电路、应用于音频功放的工程师,对于A类,B类,AB类,D类,G类,H类,T类功放应该特别熟悉。大多数工程师或许只知道其中的一部分、或者知道大概,为了让更多的工程师掌握更加详尽的音频功放知识,下文对以上说的音频功放做详细的说明。 功放,顾名思义,就是功率放大的缩写。与电压或者电流放大来说,功放要求获得一定的、不失真的功率,一般在大信号状态下工作,因此,功放电路一般包含电压放大或者电流放大电路没有的特殊问题,具体表现在:①输出功率尽可能大;②通常在大信号状态下工作;③非线性失真突

ltqdxl的博客 6595

AFL源码分析之afl-as.c详细注释

前言 afl-as注释好了,明白了是如何进行插桩的,以及插在哪里 本文主要参考Sakura大佬文章:https://eternalsakura13.com/2020/08/23/afl/ 编写不易,如果能够帮助到你,希望能够点赞收藏加关注哦Thanks♪(・ω・)ノ /* Copyright 2013 Google LLC All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); y

hollk’s blog 2172

Flink SQL 连接器实战:MySQL Source、Flink CDC 与 JDBC Sink 全解析

提供有界流读取,适合批处理和维表场景,简单直接但无法感知变更。MySQL CDC提供无界流读取,通过「全量快照 + binlog 增量」的方式实现实时捕获,是实时数仓的核心入口,但需要 MySQL 侧正确配置 binlog 和权限。JDBC Sink负责结果回写,关键在于区分仅插入流和更新流,更新流必须依赖主键完成 upsert。掌握这三者的差异,本质上就是掌握了 Flink 中「有界与无界」「追加与更新」这两组最基本的语义。

2401_83857914的博客 455

VHDL语法学习笔记:一文掌握VHDL语法

今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货。 VHDL语法学习笔记 一、VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed Integrated Circuit Hardware DescriptionLanguage,诞生于 1982 年。 1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自 IEEE 公布了 VHDL 的标准版本 IEEE-1076(简称 87 版)...

2万+

MySQL 中 DISTINCT 与 GROUP BY 哪个效率更高?

DISTINCT与GROUP BY在纯去重场景下,MySQL 8.0 中执行计划通常一致,效率基本相同。老版本(8.0.13 之前)GROUP BY有隐式排序开销,DISTINCT往往更快。需要聚合或HAVING时,只能用GROUP BY。效率的真正决定因素是索引和执行计划,而不是这两个关键字本身。所以,与其问「哪个更快」,不如问「我的查询有没有走对索引」。

2601_96709915的博客 326

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Docker 部署 WordPress+MySQL 高可用架构

点「安装 WordPress」

一直在努力学习的菜鸟 227

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

基于 FastAPI+LangChain+LangGraph+Agent+Vue3+MySQL 的房产数据采集与房价预测分析平台

本文介绍一个完整的「房产数据采集+AI房价预测」全栈项目,涵盖FastAPI异步后端、LangGraph Agent智能问答、爬虫采集、机器学习预测与Vue3前端,实现从数据采集到AI交互的闭环。项目融合多技术栈,具备真实业务场景与生产级设计(如降级策略、流式输出、多模型对比),兼具简历亮点与答辩演示优势,可系统性提升工程能力,并附高频面试题解析,是理想的技术综合实践项目。

深耕开发,专注编程实战。分享源码解析、项目搭建、问题排查笔记,沉淀技术,持续更新。 231

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MySQL 8.0 双向主从复制故障修复与重建指南

MySQL 8.0 双向主从复制故障修复 SOP:XtraBackup 重建备用节点,解决 GTID 1236 / 历史日志冲突

「YYL DBA手记」 数据库 · 架构 · 运维 · 实战 yyldba.blog.youkuaiyun.com 297

MySQL 8.0停服了,信创替代的窗口正在关闭

最近跟几个做信创的朋友聊天,发现一个被忽略的问题。MySQL 8.0在今年4月正式停了官方支持,Oracle不再出安全补丁,bug也没人修了。但大量企业的业务系统还跑在上面。这事搁以前不算急,慢慢选就行了。但现在不行了,国资委79号文写得很清楚,2027年底前央国企核心系统得完成国产化替换。MySQL停服跟信创deadline撞在一起,留给MySQL用户做决定的时间不多了。我做过不少数据库迁移项目,MySQL替代这个事,坑比大多数人想的要多。今天聊几个我觉得最容易被忽视的点。

databasedb的博客 333

MySQL:库与表的操作

本文系统讲解MySQL库的操作,涵盖创建、查看、修改、删除数据库及字符集、校验规则的配置与影响。重点说明CREATE DATABASE语法、字符集(如utf8mb4)与校验规则(如utf8_general_ci vs utf8_bin)对大小写敏感性和排序的影响。通过实例演示不同校验规则下查询与排序结果差异。同时介绍SHOW DATABASES、USE、ALTER DATABASE、DROP DATABASE等操作,并强调备份恢复(mysqldump)与连接状态监控(SHOW PROCESSLIST)的重要

2401_87306079的博客 325

MySQL 主从复制进阶(2026):GTID、复制延迟排查与故障切换

load 高到底是 CPU 还是 IO?free 的 available 才是关键。us/sy/wa 决策树 + iostat/sar/iftop 实战,CPU/内存/磁盘/网络四大瓶颈定位方法论。

2502_91473995的博客 182

Linux、Shell、MySQL 测试卷逐题细讲(下篇:MySQL)

本文为Linux、Shell、MySQL测试卷下半段MySQL部分逐题讲解,包含填空、选择与SQL分析三类题型。填空题覆盖COUNT、HAVING、DISTINCT、事务、约束、索引等核心语法;选择题辨析存储过程、索引类型、ACID、存储引擎、用户管理等考点。SQL大题围绕员工、部门、职位、地点四张关联表,考察多表连接、分组聚合、自连接、相关子查询、NULL处理等高频写法,标注LEFT JOIN统计计数、NULL判断、子查询别名等易错坑点,同时梳理试卷OCR识别带来的干扰问题,重点提示SQL实操中的常见失误

dongziwen1的博客 185

MySQL 为什么选择 B+ 树作为索引结构

B 树和 B+ 树都是多路平衡树,但 B+ 树在数据库场景下更有优势,主要体现在以下几个方面。对比对象主要问题B+ 树的优势二叉树 / 红黑树树高过大,I/O 次数多多路平衡,树高仅 3~4 层哈希表不支持范围查询、排序天然有序,支持范围与排序B 树节点存数据,扇出小;查询路径不一致非叶子只存键,扇出大;查询路径稳定B+ 树用更矮的树高减少磁盘 I/O,用有序的叶子链表支撑范围查询,用只存键的非叶子节点换取更大的扇出,是磁盘数据库索引场景下综合表现最优的选择。

2601_96129122的博客 319
上一篇: gt-checksum v4.0.0 新功能解读系列文章(6):权限预检与修复安全策略——先确认能看见,再决定怎么修
下一篇: 参数引发的复制中断:max_binlog_cache_size 导致 SQL 线程异常的复现与分析
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值