2013年4月18日星期四
mysql引擎MyISAM和InnoDB
参考链接:
http://www.builder.com.cn/2007/0912/502919.shtml
http://blog.csdn.net/feng88724/article/details/6829416
ISAM(Indexed Sequential Access Method 索引顺序存取法)
ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。
不足:不支持事务处理,也不能够容错。
//如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MySQL能够支持这样的备份应用程序。
MyISAM
MyISAM是ISAM的扩展,是mysql缺省时的默认引擎,它增加了索引和字段管理功能;使用表格锁定机制,来优化多个并发的读写操作。MyISAM类型的表强调的是性能.如果要执行大量的SELECT,MyISAM是更好的选择.
不提供事务处理机制
MyISAM类型的二进制数据文件,可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。
HEAP
驻留在内存的临时表格里的HEAP要比ISAM和MyISAM都快,但是它所管理的数据不稳定,如果关机前没有保存,所有的数据都会丢失。在数据行被删除的时候,HEAP不会浪费大量的空间。HEAP表格select速度很快。谨记,在用完表格之后立即删除表格。
InnoDB和Berkley DB
InnoDB和BDB包括了对事务处理和外来键的支持,具有原子性。如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表.
对于支持事物的InnoDB类型的表,影响速度的主要原因是AUTOCOMMIT默认设置是打开的,而且程序没有显式调用BEGIN 开始事务,导致每插入一条都自动Commit,严重影响了速度。可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打 开也可以),将大大提高性能。
修改表的引擎:
ALTER TABLE tablename ENGINE = MyISAM ;
查看表的引擎类型
show create table tablename;
==================下面内容未亲自试验=================
1. 4.0以上mysqld都支持事务,包括非max版本。3.23的需要max版本mysqld才能支持事务。
2. 对不支持事务的表做start/commit操作没有任何效果,在执行commit前已经提交,测试:
执行一个msyql:
use test;
drop table if exists tn;
create table tn (a varchar(10)) type=myisam;
drop table if exists ty;
create table ty (a varchar(10)) type=innodb;
begin;
insert into tn values('a');
insert into ty values('a');
select * from tn;
select * from ty;
都能看到一条记录
执行另一个mysql:
use test;
select * from tn;
select * from ty;
只有tn能看到一条记录
然后在另一边
commit;
才都能看到记录。
3.1 innodb表不能用repair table命令和myisamchk -r table_name
但可以用check table,以及mysqlcheck [OPTIONS] database [tables]
====================================================
4. 启动mysql数据库的命令行中添加了以下参数可以使新发布的mysql数据表都默认为使用事务(只影响到create语句。)
--default-table-type=InnoDB
测试命令:
use test;
drop table if exists tn;
create table tn (a varchar(10));
show create table tn;
==========================================
第4条我试了不成功,不过每次修改一个表的引擎之后,该数据库的默认引擎就变为改后的引擎了.所以其实没有必要专门去修改默认引擎.
我的环境是ubuntu linux,上面的操作可能是windows系统.
==========================================
订阅:
博文评论 (Atom)
没有评论:
发表评论