不同存储引擎底层数据的存储方式不一样
使用如下命令:
mysql> show global variables like "%datadir%";
存储引擎的使用
数据库中的各表均被(在创建表时)指定的存储引擎来处理。
服务器可用的引擎依赖以下的因素:
- MySQL的版本
- 服务器在开发时如何被配置
- 启动选项
为了解当前服务器中有哪些存储引擎可用,可使用SHOW ENGINES语句:
mysql> show engines;+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| Engine | Support | Comment | Transactions | XA | Savepoints |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| CSV | YES | CSV storage engine | NO | NO | NO || MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO || MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO || BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO || MyISAM | YES | MyISAM storage engine | NO | NO | NO || InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES || ARCHIVE | YES | Archive storage engine | NO | NO | NO || PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO || FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+9 rows in set
常用的存储引擎
1、MyISAM存储引擎
MyISAM 存储引擎是MyISAM 最常用的引擎。
它管理的表具有以下特征:
- 使用三个文件表示每个表:
* 格式文件 - 存储表结构的定义(mytable.frm)
* 数据文件 - 存储表行的内容(mytable.MYD)
* 索引文件 - 存储表上索引(mytable.MYI)
- 灵活的AUTO_INCREMENT 字段处理
- 可被转换为压缩、只读来节省空间
2、InnoDB存储引擎
InnoDB存储引擎是MySQL的缺省引擎。
它管理的表具有下列主要特征:
- 每个InnoDB表在数据库目录中以.frm格式文件表示
- InnoDB表空间tablespace被用于存储表的内容
- 提供一组用来记录事务性活动的日志文件
- 用 COMMIT、SAVEPOINT及ROLLBACK支持事务处理
- 提供全ACID兼容
- 在MySQL服务器奔溃后提供自动恢复
- 多版本(MVCC)和行级锁定
- 支持外键及引用的完整性,包括级联删除和更新
3、MEMORY存储引擎
使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MEMORY存储引擎非常快。
MEMORY存储引擎管理的表具有以下特征:
- 在数据库目录中,每个表均以.frm格式的文件表示
- 表数据及索引被存储在内存中
- 表级锁机制
- 不能包含TEXT或BLOB字段
MEMORY存储引擎以前被称为HEAP引擎。
选择合适的存储引擎
* MyISAM表最适合于大量的数据读而少量数据更新的混合操作。MyISAM表的另一种使用情形是使用压缩只读表。
* 如果查询中包含较多的数据更新操作,应该使用InnoDB。其行级锁机制和多版本的支持为数据读取和更新的混合操作提供了良好的并发机制。
* 可使用MEMORY存储引擎来存储非永久需要的数据,或者是能够从基于磁盘的表中重新生成的数据。