SQL 教程
Posts in this series (10)AI 智能总结
数据库 10 差异化核心知识点
三者虽然遵循SQL标准,但底层实现、核心组件、扩展语法完全不同。面试与跨库开发,必须掌握各家独有的核心机制。
一、MySQL 特有核心
-
MVCC(多版本并发控制)
基于undo log构建数据快照,实现InnoDB无锁读,支撑「可重复读」隔离级别,规避大量锁竞争。 -
三大日志体系
redo log:崩溃恢复,保证事务持久性;undo log:构建快照、事务回滚;binlog:二进制日志,用于主从复制、时间点恢复。
- 分库分表
原生不支持分布式分片,依赖中间件(Sharding-JDBC、MyCat)水平/垂直拆分,解决单表海量数据瓶颈。
配套特性:InnoDB聚簇索引、事务隔离级别默认可重复读。
-- 查看binlog是否开启SHOW VARIABLES LIKE 'log_bin';二、Oracle 特有核心
-
表空间(Tablespace)
数据不直接绑定表,通过表空间管理数据文件,支持冷热数据分层存储。 -
回滚段(Undo Segment)
对应MySQL undo log,存放数据修改前镜像,用于读一致性、事务回滚。 -
PL/SQL
Oracle专属过程语言,用于编写存储过程、函数、触发器,语法独立,无法迁移至其他数据库。 -
SGA / PGA
内存架构核心:
- SGA:共享内存池(缓冲区、重做日志缓冲区);
- PGA:进程私有内存,排序、哈希连接使用。
-- 查询SGA大小SELECT value FROM v$parameter WHERE name = 'sga_target';三、SQL Server 特有核心
-
单一事务日志(LDF)
没有独立redo/undo分离设计,所有变更统一记录在事务日志,恢复、副本同步全部依赖日志备份。 -
自带图形化执行计划
执行计划信息丰富,内置索引缺失提示,调优工具生态完善。 -
T-SQL
SQLServer扩展方言,变量声明、分支、存储过程语法私有;支持表变量、临时表专属语法。
-- T-SQL 变量示例DECLARE @name VARCHAR(32);SET @name = 'test';四、横向差异化总结
-
日志模型
MySQL:redo + undo + binlog三者分工;
Oracle:Online Redo Log + 归档日志 + 回滚段;
SQLServer:统一事务日志.ldf。 -
内存模型
MySQL:innodb_buffer_pool_size为主;
Oracle:SGA+PGA双层架构;
SQLServer:最大服务器内存统一管控缓存。 -
编程扩展
MySQL:存储过程语法简单,无强大原生编程语言;
Oracle:PL/SQL;
SQLServer:T-SQL。 -
海量数据扩展
MySQL:依靠外部中间件实现分库分表;
Oracle:分区表、表空间;
SQLServer:分区表、文件组。
开发实践提示
- 跨系统开发尽量隔离数据库私有特性,避免深度绑定MVCC、PL/SQL、T-SQL;
- 性能调优方向不同:MySQL重点优化缓冲池、binlog;Oracle重点调优SGA/PGA;SQLServer关注事务日志大小与自动增长;
- 迁移项目最大坑:私有编程语法(PL/SQL/T-SQL)、底层日志机制无法直接互通。