ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取 *** 作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MySQL能够支持这样的备份应用程序。
MyISAM强调了快速读取 *** 作,这可能就是为什么MySQL受到了Web开发如此青睐的主要原因:在Web开发中你所进行的大量数据 *** 作都是读取 *** 作。所以,大多数虚拟主机提供商和Internet平台提供商(Internet Presence Provider,IPP)只允许使用MyISAM格式。
HEAP
HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MyISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和 *** 控数据的时候非常有用。要记住,在用完表格之后就删除表格。让我再重复一遍:在你用完表格之后,不要忘记删除表格。
InnoDB和Berkley DB
InnoDB和Berkley DB(BDB)数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MySQL++ API。在使用MySQL的时候,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理也不支持外来键。尽管要比ISAM和MyISAM引擎慢很多,但是InnoDB和BDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者或者两者,那你就要被迫使用后两个引擎中的一个了。
myisam在mysql5.5之前是默认存储引擎,从5.5开始mysql的默认存储引擎为innodb.目前mysql版本myisam仍然有广泛的应用.mysql的一些系统表和临时表存储引擎仍然使用的myisam.这里的临时表指的是在查询过程中对查询的数据进行排序,分组等 *** 作,数据量超过一定数量时,由查询优化器建立的临时表.
myisam每个表都有三个文件组成:
.frm 表结构描述
.MYD 存储数据
.MYI 存储索引
myisam存储引擎的锁级别为表级锁,myisam为表级读共享写独占锁.myisam读并不会完全阻塞写,myisam允许在读的同时在表的后面追加对应的数据.concurrent_insert控制对应的并发性.
concurrent_insert可以设置为以下3个值:
在5.0之前,myisam只支持文件大小为4G的文件,再次之后支持256TB大小的文件.如果表要大于4G,需要设置MAX_ROWS和AVG_ROW_LENGTH的值.
相对于innodb存储引擎来说myisam占用的表空间更加少。myisam支持通过myisampack对单个表做进一步压缩。通过myisampack进行压缩,myisampack能过将数据压缩40%~70%。但是通过myisampack压缩后的数据该表将变成只读。压缩后需要对该表进行检查,使用工具myisamchk。
myisam存储引擎不支持事务。update后无需commit将会自动提交,也无法回滚。正是如此,myisam没有redo log以及undo log文件。在迁移数据对应的表的时候,只需要将对应的表拷贝到目标机器上就可以使用了。但是由于没有redo log和undo log,这样容易造成表损坏。
通过check table tablename和repair table tablename两条命令表进行修护。
myisam含有一些空间函数。一些地理信息系统的空间应用需要使用这种类型的存储引擎。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)