华为云Flexus+DeepSeek征文 | 基于Dify和DeepSeek-R1开发企业级AI Agent全流程指南
MySQL 的存储引擎是数据库的底层核心组件,它决定了数据如何存储、索引如何组织、事务是否支持以及并发控制机制等关键特性。InnoDB 是 MySQL 最常用的存储引擎,专为事务处理和高并发场景设计,支持 ACID 事务和行级锁。MyISAM 是 MySQL 最早的存储引擎,不支持事务和行锁,但查询性能较好,适合读多写少的场景。Memory 引擎将数据完全存储在内存中,访问速度极快,但数据在重启后
MySQL 的存储引擎是数据库的底层核心组件,它决定了数据如何存储、索引如何组织、事务是否支持以及并发控制机制等关键特性。选择合适的存储引擎对数据库的性能、可靠性和功能实现至关重要。
查看支持的存储引擎
SHOW ENGINES;
设置默认存储引擎
在 MySQL 配置文件 my.cnf 中设置
[mysqld]
default-storage-engine=InnoDB
2、 InnoDB(MySQL 5.5+ 默认引擎)
InnoDB 是 MySQL 最常用的存储引擎,专为事务处理和高并发场景设计,支持 ACID 事务和行级锁。
核心特性:
支持事务:完全符合 ACID 特性,支持 COMMIT、ROLLBACK、SAVEPOINT。
行级锁:仅锁定修改的行,大幅提升并发写性能(适合多用户同时操作)。
外键约束:支持 FOREIGN KEY,保证数据参照完整性。
聚簇索引:数据和主键索引存储在一起,查询主键效率极高。
崩溃恢复:通过 redo log 和 undo log 实现崩溃后的数据恢复。
MVCC:多版本并发控制,支持高并发读写(读不加锁,读写不冲突)。
示例
-- 创建 InnoDB 表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
-- 创建带外键的 InnoDB 表
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
amount DECIMAL(10,2),
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB;
3、MyISAM(早期 MySQL 默认引擎)
MyISAM 是 MySQL 最早的存储引擎,不支持事务和行锁,但查询性能较好,适合读多写少的场景。
核心特性:
不支持事务:无 COMMIT/ROLLBACK,崩溃后可能数据损坏。
表级锁:修改数据时锁定整个表,并发写性能差。
不支持外键:不支持外键约束
支持全文索引:早期版本中唯一支持全文索引的引擎(MySQL 5.6 后 InnoDB 也支持)。
存储结构:数据和索引分开存储(.MYD 数据文件,.MYI 索引文件)。
压缩表:可压缩只读表,节省存储空间。
示例
-- 创建 MyISAM 表
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FULLTEXT(message)
) ENGINE=MyISAM;
-- 使用全文搜索
SELECT * FROM logs WHERE MATCH(message) AGAINST('error');
3、Memory(Heap)
Memory 引擎将数据完全存储在内存中,访问速度极快,但数据在重启后丢失,适合临时数据存储。
核心特性:
内存存储:数据存于内存,读写速度远快于磁盘引擎。
支持哈希索引:默认使用哈希索引,等值查询效率极高(范围查询性能差)。
表级锁:并发写性能有限。
数据易失:MySQL 重启或崩溃后,数据全部丢失。
存储限制:受内存大小限制,不适合存储大量数据。
示例
-- 创建 Memory 表
CREATE TABLE session_data (
session_id VARCHAR(32) PRIMARY KEY,
user_id INT,
data TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=MEMORY;
-- 插入数据
INSERT INTO session_data (session_id, user_id, data)
VALUES ('abc123', 1, 'user_preferences');
4、存储引擎常见操作
4.1 查看表的存储引擎
SHOW TABLE STATUS LIKE 'table_name';
-- 或
SELECT TABLE_NAME, ENGINE
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'your_database';
4.2 修改表的存储引擎
ALTER TABLE table_name ENGINE = InnoDB;
4.3 性能优化建议
4.3.1 InnoDB 优化
-- 调整缓冲池大小(在my.cnf中设置)
[mysqld]
innodb_buffer_pool_size = 1G
-- 使用合适的行格式
ALTER TABLE table_name ROW_FORMAT=COMPRESSED;
-- 调整日志文件大小
innodb_log_file_size = 256M
4.3.2 MyISAM 优化
-- 优化表(整理碎片)
OPTIMIZE TABLE table_name;
-- 调整键缓存大小(在my.cnf中设置)
key_buffer_size = 256M
更多推荐
所有评论(0)