greatsql教程FG008-GreatSQL存储引擎类型与选择策略
内容简介
本教程详细介绍GreatSQL数据库的存储引擎类型和选择策略,包括InnoDB、MyISAM、Memory等存储引擎的特点、适用场景和性能对比。风哥教程参考GreatSQL官方文档存储引擎指南,帮助读者根据业务需求选择合适的存储引擎。
存储引擎是GreatSQL数据库的核心组件,不同的存储引擎具有不同的特性和适用场景。合理选择存储引擎可以显著提高数据库性能和可靠性。本教程将详细讲解各种存储引擎的特点和选择方法。
目录大纲
Part01-基础概念与理论知识
1.1 存储引擎概述
存储引擎是GreatSQL数据库中负责存储和管理数据的核心组件,它决定了数据的存储方式、索引结构、事务支持等特性。GreatSQL支持多种存储引擎,每种引擎都有其特定的优势和适用场景。
1.2 常见存储引擎
GreatSQL支持的常见存储引擎:
- InnoDB:默认存储引擎,支持事务、行级锁、外键等特性
- MyISAM:传统存储引擎,适合读密集型应用
- Memory:内存存储引擎,适合临时表和缓存
- Archive:归档存储引擎,适合存储大量历史数据
- CSV:逗号分隔值存储引擎,适合数据交换
- Blackhole:黑洞存储引擎,适合复制环境
1.3 存储引擎特性对比
| 存储引擎 | 事务支持 | 行级锁 | 外键支持 | 全文索引 | 适用场景 |
|---|---|---|---|---|---|
| InnoDB | 是 | 是 | 是 | 是 | 事务处理、高并发 |
| MyISAM | 否 | 否 | 否 | 是 | 读密集型应用 |
| Memory | 否 | 表级锁 | 否 | 是 | 临时表、缓存 |
| Archive | 否 | 表级锁 | 否 | 否 | 归档数据 |
Part02-生产环境规划与建议
2.1 存储引擎选择原则
风哥提示:选择存储引擎时应根据业务需求、性能要求和数据特性综合考虑。
存储引擎选择原则:
- 事务需求:需要事务支持时选择InnoDB
- 并发性能:高并发场景选择InnoDB
- 读性能:读密集型应用可考虑MyISAM
- 数据持久性:需要持久化存储时选择InnoDB
- 存储空间:Archive适合存储空间敏感的场景
- 临时数据:临时数据可使用Memory引擎
2.2 不同场景的存储引擎选择
不同场景的存储引擎推荐:
- OLTP系统:InnoDB(支持事务和并发)
- 数据仓库:InnoDB或MyISAM(根据查询模式)
- 日志系统:Archive(压缩存储)
- 缓存表:Memory(快速访问)
- 只读报表:MyISAM(读性能优)
2.3 存储引擎迁移策略
存储引擎迁移策略:
- 评估迁移影响
- 选择合适的迁移方法
- 进行迁移测试
- 执行迁移操作
- 验证迁移结果
更多视频教程www.fgedu.net.cn
Part03-生产环境项目实施方案
3.1 存储引擎配置
存储引擎配置步骤:
- 设置默认存储引擎
- 配置存储引擎特定参数
- 监控存储引擎性能
- 调整存储引擎配置
3.2 表级存储引擎设置
表级存储引擎设置方法:
- 创建表时指定存储引擎
- 修改现有表的存储引擎
- 批量修改表的存储引擎
3.3 存储引擎监控
存储引擎监控内容:
- 查看存储引擎状态
- 监控存储引擎性能指标
- 分析存储引擎瓶颈
- 优化存储引擎配置
Part04-生产案例与实战讲解
4.1 存储引擎查看与设置
# 查看支持的存储引擎
mysql -u root -pFGedu123456! -e “SHOW ENGINES;”
mysql -u root -pFGedu123456! -e “SHOW ENGINES;”
+——————–+———+—————————————————————-+————–+——+————+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+——————–+———+—————————————————————-+————–+——+————+
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+——————–+———+—————————————————————-+————–+——+————+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+——————–+———+—————————————————————-+————–+——+————+
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+——————–+———+—————————————————————-+————–+——+————+
# 查看默认存储引擎
mysql -u root -pFGedu123456! -e “SHOW VARIABLES LIKE ‘default_storage_engine’;”
mysql -u root -pFGedu123456! -e “SHOW VARIABLES LIKE ‘default_storage_engine’;”
+————————+——–+
| Variable_name | Value |
+————————+——–+
| default_storage_engine | InnoDB |
+————————+——–+
| Variable_name | Value |
+————————+——–+
| default_storage_engine | InnoDB |
+————————+——–+
# 修改默认存储引擎
mysql -u root -pFGedu123456! -e “SET GLOBAL default_storage_engine = ‘InnoDB’;”
mysql -u root -pFGedu123456! -e “SET GLOBAL default_storage_engine = ‘InnoDB’;”
Query OK, 0 rows affected (0.00 sec)
学习交流加群风哥微信: itpux-com
4.2 InnoDB存储引擎实战
# 创建使用InnoDB引擎的表 USE fgedudb; CREATE TABLE fgedu_innodb_test ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, value INT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Database changed
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
# 插入测试数据 INSERT INTO fgedu_innodb_test (name, value) VALUES (‘fgedu1’, 100), (‘fgedu2’, 200), (‘fgedu3’, 300);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
Records: 3 Duplicates: 0 Warnings: 0
# 查看表结构 SHOW CREATE TABLE fgedu_innodb_test;
+——————–+——————————————————————————————————————————————————————————————————————————————+
| Table | Create Table |
+——————–+——————————————————————————————————————————————————————————————————————————————+
| fgedu_innodb_test | CREATE TABLE `fgedu_innodb_test` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`value` int NOT NULL,
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |
+——————–+——————————————————————————————————————————————————————————————————————————————+
| Table | Create Table |
+——————–+——————————————————————————————————————————————————————————————————————————————+
| fgedu_innodb_test | CREATE TABLE `fgedu_innodb_test` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`value` int NOT NULL,
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |
+——————–+——————————————————————————————————————————————————————————————————————————————+
4.3 存储引擎迁移实战
# 创建MyISAM表 CREATE TABLE fgedu_myisam_test ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, value INT NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.01 sec)
# 插入测试数据 INSERT INTO fgedu_myisam_test (name, value) VALUES (‘fgedu1’, 100), (‘fgedu2’, 200), (‘fgedu3’, 300);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
Records: 3 Duplicates: 0 Warnings: 0
# 迁移到InnoDB引擎 ALTER TABLE fgedu_myisam_test ENGINE=InnoDB;
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
Records: 3 Duplicates: 0 Warnings: 0
# 验证迁移结果 SHOW CREATE TABLE fgedu_myisam_test;
+——————–+—————————————————————————————————————————————————————————————————————————————+
| Table | Create Table |
+——————–+—————————————————————————————————————————————————————————————————————————————+
| fgedu_myisam_test | CREATE TABLE `fgedu_myisam_test` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`value` int NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |
+——————–+—————————————————————————————————————————————————————————————————————————————+
| Table | Create Table |
+——————–+—————————————————————————————————————————————————————————————————————————————+
| fgedu_myisam_test | CREATE TABLE `fgedu_myisam_test` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`value` int NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |
+——————–+—————————————————————————————————————————————————————————————————————————————+
学习交流加群风哥QQ113257174
# 批量修改存储引擎
mysql -u root -pFGedu123456! -e “SELECT CONCAT(‘ALTER TABLE ‘, table_name, ‘ ENGINE=InnoDB;’) FROM information_schema.tables WHERE table_schema=’fgedudb’ AND engine=’MyISAM’;”
mysql -u root -pFGedu123456! -e “SELECT CONCAT(‘ALTER TABLE ‘, table_name, ‘ ENGINE=InnoDB;’) FROM information_schema.tables WHERE table_schema=’fgedudb’ AND engine=’MyISAM’;”
+————————————————————————————————–+
| CONCAT(‘ALTER TABLE ‘, table_name, ‘ ENGINE=InnoDB;’) |
+————————————————————————————————–+
+————————————————————————————————–+
| CONCAT(‘ALTER TABLE ‘, table_name, ‘ ENGINE=InnoDB;’) |
+————————————————————————————————–+
+————————————————————————————————–+
Part05-风哥经验总结与分享
5.1 常见存储引擎问题与解决方案
| 问题 | 解决方案 |
|---|---|
| InnoDB表空间过大 | 定期清理碎片,使用OPTIMIZE TABLE命令 |
| MyISAM表损坏 | 使用myisamchk工具修复 |
| Memory表数据丢失 | 定期备份,或使用持久化存储引擎 |
| 存储引擎转换失败 | 检查表结构,确保兼容新引擎的特性 |
5.2 存储引擎最佳实践
- 默认使用InnoDB存储引擎
- 根据业务需求选择合适的存储引擎
- 定期监控存储引擎性能
- 合理配置存储引擎参数
- 避免在同一实例中混合使用多种存储引擎
更多学习教程公众号风哥教程itpux_com
5.3 性能优化建议
# 配置InnoDB参数
cat >> /etc/my.cnf << EOF
# InnoDB优化 innodb_buffer_pool_size = 8G innodb_buffer_pool_instances = 8 innodb_file_per_table = 1 innodb_log_file_size = 512M innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT EOF
# 重启服务
systemctl restart greatsql
cat >> /etc/my.cnf << EOF
# InnoDB优化 innodb_buffer_pool_size = 8G innodb_buffer_pool_instances = 8 innodb_file_per_table = 1 innodb_log_file_size = 512M innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT EOF
# 重启服务
systemctl restart greatsql
# 监控InnoDB状态
mysql -u root -pFGedu123456! -e “SHOW ENGINE INNODB STATUS\G”
mysql -u root -pFGedu123456! -e “SHOW ENGINE INNODB STATUS\G”
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
2026-04-09 14:00:00 0x7f1234567890 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 10 seconds
—————–*
BACKGROUND THREAD
—————–
…
Type: InnoDB
Name:
Status:
=====================================
2026-04-09 14:00:00 0x7f1234567890 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 10 seconds
—————–*
BACKGROUND THREAD
—————–
…
存储引擎选择决策树
风哥提示:选择存储引擎时可参考以下决策流程:
- 是否需要事务支持?是 → InnoDB
- 是否需要外键约束?是 → InnoDB
- 是否是读密集型应用?是 → 考虑MyISAM
- 是否是临时数据?是 → Memory
- 是否是归档数据?是 → Archive
- 其他情况 → InnoDB
from greatsql视频:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
