713 words
4 minutes
SQL 系列(十):差异化核心知识点

AI 智能总结

数据库 10 差异化核心知识点#

三者虽然遵循SQL标准,但底层实现、核心组件、扩展语法完全不同。面试与跨库开发,必须掌握各家独有的核心机制。

一、MySQL 特有核心#

  1. MVCC(多版本并发控制)
    基于undo log构建数据快照,实现InnoDB无锁读,支撑「可重复读」隔离级别,规避大量锁竞争。

  2. 三大日志体系

  • redo log:崩溃恢复,保证事务持久性;
  • undo log:构建快照、事务回滚;
  • binlog:二进制日志,用于主从复制、时间点恢复。
  1. 分库分表
    原生不支持分布式分片,依赖中间件(Sharding-JDBC、MyCat)水平/垂直拆分,解决单表海量数据瓶颈。

配套特性:InnoDB聚簇索引、事务隔离级别默认可重复读。

-- 查看binlog是否开启
SHOW VARIABLES LIKE 'log_bin';

二、Oracle 特有核心#

  1. 表空间(Tablespace)
    数据不直接绑定表,通过表空间管理数据文件,支持冷热数据分层存储。

  2. 回滚段(Undo Segment)
    对应MySQL undo log,存放数据修改前镜像,用于读一致性、事务回滚。

  3. PL/SQL
    Oracle专属过程语言,用于编写存储过程、函数、触发器,语法独立,无法迁移至其他数据库。

  4. SGA / PGA
    内存架构核心:

  • SGA:共享内存池(缓冲区、重做日志缓冲区);
  • PGA:进程私有内存,排序、哈希连接使用。
-- 查询SGA大小
SELECT value FROM v$parameter WHERE name = 'sga_target';

三、SQL Server 特有核心#

  1. 单一事务日志(LDF)
    没有独立redo/undo分离设计,所有变更统一记录在事务日志,恢复、副本同步全部依赖日志备份。

  2. 自带图形化执行计划
    执行计划信息丰富,内置索引缺失提示,调优工具生态完善。

  3. T-SQL
    SQLServer扩展方言,变量声明、分支、存储过程语法私有;支持表变量、临时表专属语法。

-- T-SQL 变量示例
DECLARE @name VARCHAR(32);
SET @name = 'test';

四、横向差异化总结#

  1. 日志模型
    MySQL:redo + undo + binlog三者分工;
    Oracle:Online Redo Log + 归档日志 + 回滚段;
    SQLServer:统一事务日志.ldf。

  2. 内存模型
    MySQL:innodb_buffer_pool_size为主;
    Oracle:SGA+PGA双层架构;
    SQLServer:最大服务器内存统一管控缓存。

  3. 编程扩展
    MySQL:存储过程语法简单,无强大原生编程语言;
    Oracle:PL/SQL;
    SQLServer:T-SQL。

  4. 海量数据扩展
    MySQL:依靠外部中间件实现分库分表;
    Oracle:分区表、表空间;
    SQLServer:分区表、文件组。

开发实践提示#

  1. 跨系统开发尽量隔离数据库私有特性,避免深度绑定MVCC、PL/SQL、T-SQL;
  2. 性能调优方向不同:MySQL重点优化缓冲池、binlog;Oracle重点调优SGA/PGA;SQLServer关注事务日志大小与自动增长;
  3. 迁移项目最大坑:私有编程语法(PL/SQL/T-SQL)、底层日志机制无法直接互通。
SQL 系列(十):差异化核心知识点
https://fuwari.vercel.app/posts/sql-series/sql-10-differences/
Author
Zero02
Published at
2025-06-03
License
CC BY-NC-SA 4.0