又看了一次基本的存储引擎相关,为了以后好找,就把自己认为需要巩固的放在了上面,仅做参考。
什么是存储引擎:
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在 MySQL中被称作存储引擎(也称作表类型)。 MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。
MySQL常用的存储引擎为MyISAM、InnoDB、MEMORY、MERGE,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表。
MyISAM是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种:
其数据保存有.frm、.MYI、.MYD三种格式的文件,其中表定义在.frm这里;数据文件保存在.MYD;索引保存在.MYI里。
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
InnoDB的数据保存与MyISAM的不同,其数据文件保存在类似ibdate1这样的文件里面,而在库下面只有一个.frm相关的表定义文件。
查看当前系统支持的存储引擎类型:
mysql> show engines;
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.00 sec)
下面举些实际数字:
开始查看一个表的格式为InnoDB的
mysql> show table status like 'pet_bak'\G
*************************** 1. row ***************************
Name: pet_bak
Engine: InnoDB
Version: 10
Row_format: Compact
其在库下面对应的只有表定义文件:
-rw-rw---- 1 mysql mysql 8690 May 29 17:05 pet_bak.frm
然后修改表的存储引擎类型:
mysql> alter table pet_bak engine=MyISAM;
其在库下面的文件就变成了:
-rw-rw---- 1 mysql mysql 1024 May 29 16:57 pet_bak.MYI
-rw-rw---- 1 mysql mysql 0 May 29 16:57 pet_bak.MYD
-rw-rw---- 1 mysql mysql 8690 May 29 16:57 pet_bak.frm
相关参考链接:
存储引擎比较
http://menglimengwai.iteye.com/blog/464667
浅谈MySql的存储引擎(表类型)
http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html
MySQL 架构 - MySQL 存储引擎 -MyISAM
http://database.ctocio.com.cn/18/8904518.shtml