MySQL中主要使用到三种数据表:MyISAM、InnoDB与HEAP。
HEAP是存储在内存中的数据表,如果计算机关闭或重启或者mysqld进程崩溃,数据表就不存在,而且无法恢复了,但是其速度飞快。HEAP的限制也比较多,不允许使用xxxTEXT和xxxBLOB数据类型,只允许使用=和<=>操作符来搜索记录(不允许使用<、>、<=或=>操作符);不支持AUTO_INCREMENT属性;只允许对NOT NULL数据列进行索引。
InnoDB与MyISAM都是存储在硬盘上的数据表,其中InnoDB是MySQL公司自己开发的引擎,而InnoDB是另外一家公司开发的,在进行商业授权时,支持InnoDB的价格要贵一点,但是InnoDB支持事务,而MyISAM不支持事务。
相较于MyISAM,InnoDB有以下优点:
InnoDB存储空间占用量比MyISAM大的多,不支持全文索引,不能用来保存GIS数据,COUNT函数的速度比MyISAM的COUNT速度要慢的多。
MyISAM数据表:
MyISAM又分为静态(MyISAL Static)与动态(MyISAM Dynamic)两种。
如果数据表里的数据列各自都有预先定义好的固定长度,MySQL自动选择静态数据表类型,这种表的数据存取效率非常高,安全性也相当高,即使出现文件受损或其他问题,数据记录的撮和恢复工作也比其他类型的数据表容易。
如果在数据表里有且只有一个VARCHAR、xxxTEXT或xxxBLOB字段,MySQL将自动选择动态数据表类型,动态表对存储空间要小的多,如果对这类表进行频繁的更新,会产生很多碎片,要经常使用OPTIMIZE TABLE来优化。
可以使用myisamchk命令对MyISAM表进行压缩,表压缩后功能会受到很大限制,例如不能进行UPDATE
HEAP是存储在内存中的数据表,如果计算机关闭或重启或者mysqld进程崩溃,数据表就不存在,而且无法恢复了,但是其速度飞快。HEAP的限制也比较多,不允许使用xxxTEXT和xxxBLOB数据类型,只允许使用=和<=>操作符来搜索记录(不允许使用<、>、<=或=>操作符);不支持AUTO_INCREMENT属性;只允许对NOT NULL数据列进行索引。
InnoDB与MyISAM都是存储在硬盘上的数据表,其中InnoDB是MySQL公司自己开发的引擎,而InnoDB是另外一家公司开发的,在进行商业授权时,支持InnoDB的价格要贵一点,但是InnoDB支持事务,而MyISAM不支持事务。
相较于MyISAM,InnoDB有以下优点:
- 支持事务:就是一大串指令一起执行,如果中间有一行出错,那么恢复到这串指令执行前的状态(我是这么理解的)。
- 数据行级锁定
- 外键约束条件(这个我还不太清楚,等清楚了再详细说明)
- 崩溃恢复:在发生崩溃后,InnoDB数据表能够迅速地自动恢复到一个稳定可用的状态。
InnoDB存储空间占用量比MyISAM大的多,不支持全文索引,不能用来保存GIS数据,COUNT函数的速度比MyISAM的COUNT速度要慢的多。
MyISAM数据表:
MyISAM又分为静态(MyISAL Static)与动态(MyISAM Dynamic)两种。
如果数据表里的数据列各自都有预先定义好的固定长度,MySQL自动选择静态数据表类型,这种表的数据存取效率非常高,安全性也相当高,即使出现文件受损或其他问题,数据记录的撮和恢复工作也比其他类型的数据表容易。
如果在数据表里有且只有一个VARCHAR、xxxTEXT或xxxBLOB字段,MySQL将自动选择动态数据表类型,动态表对存储空间要小的多,如果对这类表进行频繁的更新,会产生很多碎片,要经常使用OPTIMIZE TABLE来优化。
可以使用myisamchk命令对MyISAM表进行压缩,表压缩后功能会受到很大限制,例如不能进行UPDATE