关于mysql数据表myisam与innode两种类型的比较分析

接触php+mysql有一段时间了,但都没涉及过大数据量,也就企业站成百上千的,所以只要程序不出错没有什么效率不效率的。自从决定自己开发一个网站后开始注重程序运行的效率。

在写条件筛选的时候考虑到字符串的判断应该没有数字快,于是决定将原先设置为字符串的筛选字段改为整型,但毕竟是想当然于是决定在大数据量下进行实际的测试一下看到底在10万条数据的情况下速度能差多少。

做出决定后就先写程序向数据库插入10万条数据。表中包括四个字段:id, zfc_b=>'android 4.2'(varchar(30)), zfc_bb=>'android 4.2'(char(30)), sz=>'12'(tinyint)。

因为插入的数据比较多,所以就一万一万的往里写。平均每插入1万条数据大概要用26秒左右,可是写到4万条数据的时候phpmyadmin里的数据统计却是41560条。这让我很吃了一惊,这怎么可能呢,我是一万条一万条的写的怎么出了个零头呢。于是检查写入数据的程序,非常简单一点错误都没有呀,便刷新了一下phpmyadmin,情况依然不变。难道是数据没有写完脚本超时停住了。便写了个查询语句统计数据的数量,整整4万条!很是郁闷,这样看来应该是phpmyadmin的问题,百度了一下原来是因为Innode类型的表在频繁的读写后会出现统计不准的原因。

用alter table test engine=myisam更改了一下表类型。刷新phpmyadmin,统计正好4万条。呵呵,可算解决了。这还不是重点,重点是继续插入1万条数据,用时2.6秒,我的天这是真的吗?又插入了1万条2.7秒。MyISAM类型的写入数据比InnoDB的整整快了十倍,呵呵,这可真是意外的收获呀。

这样一来我对这两种类型的区别产生了很大的兴趣,决定好好的研究一下这两种类型的优劣,以下是我收集的一些相关资料。

  InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

1.InnoDB不支持FULLTEXT类型的索引。

2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。

3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。

4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。

5.MyISAM在insert、update时为表锁,而InnoDB提供行锁。


你可能感兴趣的:(关于mysql数据表myisam与innode两种类型的比较分析)