MySQL 发展历程
MySQL 由瑞典 MySQL AB 公司开发,于 2008 年被 Sun Microsystems 收购,2009 年随 Sun 被 Oracle 收购。作为最流行的开源关系型数据库,MySQL 经历了多个重要版本的迭代,每个版本都带来了关键的新特性和性能提升。
gantt
title MySQL 版本演进时间线
dateFormat YYYY
axisFormat %Y
section 早期
MySQL 1.0 诞生 :1995-01-01, 0d
MySQL 3.23 发布 :2000-01-01, 0d
section 发展
MySQL 4.0 发布 :2003-01-01, 0d
MySQL 5.0 发布 :2005-01-01, 0d
MySQL 5.5 发布 :2010-01-01, 0d
MySQL 5.6 发布 :2013-01-01, 0d
MySQL 5.7 发布 :2015-01-01, 0d
section 现代
MySQL 8.0 发布 :2018-01-01, 0d
MySQL 8.4 LTS :2024-04-01, 0d
MySQL 9.0 发布 :2024-10-01, 0d
1. MySQL 3.23 (2000年) - 奠定基础
-- MySQL 3.23 是首个广泛使用的稳定版本
-- 主要特性:
-- 1. 引入 MyISAM 存储引擎 (取代 ISAM)
-- 2. 支持 FULLTEXT 全文索引
-- 3. 首次支持事务 (通过 BerkeleyDB 引擎)
-- 4. 复制功能正式推出
-- 5. 支持 ANSI SQL99 语法
-- 解决的问题:
-- - 早期版本功能简单,无法满足复杂应用需求
-- - 缺乏全文搜索能力
-- - 没有复制功能,无法实现高可用
-- 创建 MyISAM 表并使用全文索引
CREATE TABLE articles (
id INT PRIMARY KEY,
title VARCHAR(200),
content TEXT,
FULLTEXT INDEX ft_title_content (title, content)
) ENGINE=MyISAM;
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('MySQL' IN NATURAL LANGUAGE MODE);
2. MySQL 4.0 - 性能飞跃
-- MySQL 4.0 (2003年) 是里程碑版本
-- 主要特性:
-- 1. 引入 InnoDB 存储引擎 (事务支持)
-- 2. 查询缓存 (Query Cache) 大幅提升性能
-- 3. 支持 UNION 语句
-- 4. 支持 RENAME TABLE
-- 5. 改进了 BLOB 类型的处理
-- 解决的问题:
-- - MyISAM 不支持事务,无法保证数据一致性
-- - 重复查询浪费资源,查询缓存解决此问题
-- - 无法进行复杂的 SQL 查询
-- 使用 InnoDB 引擎和事务
CREATE TABLE accounts (
id INT PRIMARY KEY,
balance DECIMAL(15,2)
) ENGINE=InnoDB;
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- 查看查询缓存状态
SHOW VARIABLES LIKE 'query_cache_type';
3. MySQL 5.0 - 企业级功能
-- MySQL 5.0 (2005年) 正式进入企业级市场
-- 主要特性:
-- 1. 存储过程 (Stored Procedures)
-- 2. 触发器 (Triggers)
-- 3. 视图 (Views)
-- 4. 游标 (Cursors)
-- 5. INFORMATION_SCHEMA 系统数据库
-- 6. 支持XA事务
-- 解决的问题:
-- - 缺少存储过程,复杂业务逻辑需在应用层实现
-- - 缺乏触发器,无法实现自动化数据维护
-- - 无法创建视图,复杂查询无法封装
-- 创建存储过程
DELIMITER //
CREATE PROCEDURE get_user_count()
BEGIN
SELECT COUNT(*) as total_users FROM users;
END //
DELIMITER ;
CALL get_user_count();
-- 创建触发器
DELIMITER //
CREATE TRIGGER before_insert_users
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SET NEW.created_at = NOW();
END //
DELIMITER ;
-- 创建视图
CREATE VIEW user_stats AS
SELECT
COUNT(*) as total,
AVG(age) as avg_age
FROM users;
4. MySQL 5.5 - 稳定与性能
-- MySQL 5.5 (2010年) 成为主流稳定版本
-- 主要特性:
-- 1. InnoDB 成为默认存储引擎
-- 2. 半同步复制 (Semi-Synchronous Replication)
-- 3. 改进的分区表功能
-- 4. SIGNAL 和 RESIGNAL 语句 (错误处理)
-- 5. 改进了 UTF-8 支持 (utf8mb4)
-- 6. 多核 CPU 性能优化
-- 解决的问题:
-- - MyISAM 不支持并发写入和数据恢复
-- - 复制延迟高,数据一致性无法保证
-- - UTF-8 只支持3字节,中文emoji受限
-- 启用半同步复制 (需要安装插件)
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
-- 使用 utf8mb4 字符集
CREATE TABLE messages (
id INT PRIMARY KEY,
content VARCHAR(1000) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci
) ENGINE=InnoDB;
-- 分区表示例
CREATE TABLE logs (
id INT,
log_date DATETIME,
message TEXT
) ENGINE=InnoDB
PARTITION BY RANGE (YEAR(log_date)) (
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION p2024 VALUES LESS THAN (2025),
PARTITION pfuture VALUES LESS THAN MAXVALUE
);
5. MySQL 5.6 - 大数据时代
-- MySQL 5.6 (2013年) 适配大数据场景
-- 主要特性:
-- 1. 索引下推优化 (Index Condition Pushdown)
-- 2. MRR (Multi-Range Read) 优化
-- 3. 全文索引支持 InnoDB
-- 4. 实时监控 InnoDB 性能
-- 5. 改进的优化器
-- 6. 延迟复制 (Delayed Replication)
-- 解决的问题:
-- - 大表查询性能差
-- - InnoDB 不支持全文索引
-- - 误操作无法快速恢复
-- EXPLAIN 查看执行计划
EXPLAIN SELECT * FROM users WHERE age > 25;
-- InnoDB 全文索引
CREATE TABLE articles (
id INT PRIMARY KEY,
title VARCHAR(200),
content TEXT,
FULLTEXT INDEX ft_content (content)
) ENGINE=InnoDB;
SELECT * FROM articles
WHERE MATCH(content) AGAINST('database' IN NATURAL LANGUAGE MODE);
-- 延迟复制 (延迟10分钟)
STOP SLAVE;
CHANGE MASTER TO MASTER_DELAY = 600;
START SLAVE;
-- 监控 InnoDB 状态
SHOW ENGINE InnoDB STATUS;
-- 查看慢查询
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
6. MySQL 5.7 - JSON 时代
-- MySQL 5.7 (2015年) 原生支持 JSON
-- 主要特性:
-- 1. 原生 JSON 数据类型和函数
-- 2. 虚拟列 (Generated Columns)
-- 3. 多源复制 (Multi-Source Replication)
-- 4. 改进的 GIS 地理位置支持
-- 5. 增强的 InnoDB 性能
-- 6. Sys schema 系统监控视图
-- 7. 支持 JSON 索引 (通过虚拟列)
-- 解决的问题:
-- - NoSQL 数据库冲击,需支持灵活 schema
-- - JSON 数据存储和查询困难
-- - 需要从多个数据源聚合数据
-- JSON 数据类型
CREATE TABLE user_configs (
id INT PRIMARY KEY,
user_id INT,
config JSON
);
INSERT INTO user_configs (user_id, config)
VALUES(1, '{"theme": "dark", "notifications": true, "language": "zh"}');
SELECT
user_id,
config->>'$.theme' as theme
FROM user_configs;
SELECT JSON_EXTRACT(config, '$.notifications') FROM user_configs;
-- 虚拟列索引
CREATE TABLE products (
id INT PRIMARY KEY,
specs JSON,
price INT,
category VARCHAR(50) GENERATED ALWAYS AS (specs->>'$.category') STORED,
INDEX idx_category (category)
);
-- GIS 地理位置
CREATE TABLE locations (
id INT,
name VARCHAR(100),
location POINT,
SPATIAL INDEX (location)
) ENGINE=InnoDB;
INSERT INTO locations VALUES(1, '天安门', ST_GeomFromText('POINT(116.397 39.909)'));
7. MySQL 8.0 - 全面进化
-- MySQL 8.0 (2018年) 里程碑版本
-- 主要特性:
-- 1. 窗口函数 (Window Functions)
-- 2. 公共表表达式 (CTE / WITH RECURSIVE)
-- 3. 隐藏索引 (Invisible Indexes)
-- 4. 降序索引 (Descending Indexes)
-- 5. 角色 (Roles) 权限管理
-- 6. 改进了 JSON 函数
-- 7. 支持 UTF8MB4 字符集默认
-- 8. 增强的 GIS 功能 (GeoJSON)
-- 9. 字典数据 (Data Dictionary)
-- 解决的问题:
-- - 复杂分析查询需要 UNION,效率低
-- - 递归查询需要程序模拟
-- - 无法在线测试索引效果
-- - 权限管理不够灵活
-- 窗口函数
SELECT
name,
department,
salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) as dept_rank,
SUM(salary) OVER (ORDER BY salary) as running_total
FROM employees;
-- 递归 CTE (查询组织架构)
WITH RECURSIVE org_tree AS (
SELECT id, name, manager_id, 1 as level
FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id, ot.level + 1
FROM employees e
JOIN org_tree ot ON e.manager_id = ot.id
)
SELECT * FROM org_tree;
-- 隐藏索引测试
CREATE INDEX idx_test ON users(email) INVISIBLE;
ALTER INDEX idx_test VISIBLE;
-- 角色权限管理
CREATE ROLE 'app_read', 'app_write';
GRANT SELECT ON mydb.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON mydb.* TO 'app_write';
GRANT 'app_read', 'app_write' TO 'user1'@'localhost';
SET DEFAULT ROLE 'app_read' FOR 'user1'@'localhost';
8. MySQL 8.4 LTS - 长期支持
-- MySQL 8.4 (2024年4月) LTS 长期支持版本
-- 主要特性:
-- 1. 性能提升 (InnoDB 引擎优化)
-- 2. JSON 数组增强
-- 3. 改进的复制功能
-- 4. 增强的安全特性
-- 5. 更好的 UTF-8 支持 (UTF8MB4 改进)
-- 6. 窗口函数性能优化
-- 7. 改进的审计日志
-- 解决的问题:
-- - 企业需要稳定可靠的长期支持版本
-- - JSON 处理效率需要提升
-- - 需要更好的安全合规性
-- 查看版本信息
SELECT VERSION();
SHOW VARIABLES LIKE 'version_comment';
-- JSON 数组函数增强
SELECT JSON_ARRAYAGG(column) FROM table;
SELECT JSON_OBJECTAGG(key, value) FROM table;
-- 检查字符集
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
9. MySQL 9.0 - AI 时代
-- MySQL 9.0 (2024年) 最新版本
-- 主要特性:
-- 1. 原生向量数据类型 (Vector Type)
-- 2. AI 查询优化器 (AI Query Optimizer)
-- 3. HNSW 索引支持向量搜索
-- 4. JavaScript 存储过程
-- 5. LATERAL JOIN 支持
-- 6. 物化视图 (Materialized Views)
-- 7. 增强的 JSON 处理
-- 8. 更好的云原生支持
-- 9. ARM64 架构优化
-- 解决的问题:
-- - AI/ML 应用需要向量数据库能力
-- - 传统 SQL 无法高效处理向量相似性搜索
-- - 需要更智能的查询优化
-- 向量数据类型
CREATE TABLE embeddings (
id INT PRIMARY KEY,
doc_text TEXT,
vector VECTOR(768),
INDEX idx_vector (vector) INDEX_TYPE = 'HNSW'
);
-- 向量相似性搜索
SELECT id, doc_text,
VECTOR_DISTANCE(vector, '[0.1, 0.2, ...]', 'cosine') as distance
FROM embeddings
ORDER BY distance
LIMIT 5;
-- JavaScript 存储过程
DELIMITER //
CREATE PROCEDURE analyze_data()
LANGUAGE JAVASCRIPT AS
$$
var result = session.sql('SELECT COUNT(*) FROM users').execute();
return 'Total users: ' + result.fetchOne()[0];
$$ //
DELIMITER ;
-- 物化视图
CREATE MATERIALIZED VIEW sales_summary
REFRESH EVERY 1 HOUR AS
SELECT
DATE(order_date) as date,
COUNT(*) as total_orders,
SUM(amount) as total_amount
FROM orders
GROUP BY DATE(order_date);
-- LATERAL JOIN
SELECT u.name, latest_orders.*
FROM users u
LEFT JOIN LATERAL (
SELECT order_id, total
FROM orders WHERE user_id = u.id
ORDER BY order_date DESC LIMIT 3
) AS latest_orders ON TRUE;
-- AI 优化提示
SELECT /*+ AI_OPTIMIZE */ * FROM large_table
WHERE complex_condition = 1;
版本选择建议
-- 版本选择指南
-- 生产环境推荐:
-- - MySQL 8.4 LTS: 稳定可靠,适合长期项目
-- - MySQL 8.0.35+: 如果需要窗口函数/CTE
-- - MySQL 5.7: 遗留系统维护 (不推荐新项目)
-- 开发/测试环境:
-- - MySQL 9.x: 测试最新特性,为迁移做准备
-- 需要向量搜索/AI 应用:
-- - MySQL 9.0+
-- 查看当前版本
SELECT
@@version as version,
@@version_comment as edition;
-- 检查支持的特性
SHOW VARIABLES LIKE 'have_%';
SHOW ENGINES;