您的位置:首页 > 数据库 > MySQL

MySQL myisam和innodb区别

2011-06-30 09:04 323 查看
最近连续接到了两次Tencent的电话面试,当然不是同一个部门。都涉及到了一个MySQL的基础知识问题。为了防止第三次打电话来,备注下。^_^。

题目1:讲讲你对mysql myisam和innodb的认识。然后你认为他们的区别在那里?为什么?

答:这两个是MySQL主要存储引擎。

简要介绍来自官网。

简要介绍:myIsam

myIdam是默认存储引擎。它基于更老的ISAM代码,但有很多有用的扩展。(注意MySQL5.1不支持ISAM)。

每个myisam在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD(MYData)。索引文件的扩展名是.MYI(MYIndex)。

简要介绍:InnoDB

InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。

InnoDB是为处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。

InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在myisam表中每个表被存在分离的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。

InnoDB默认地被包含在MySQL二进制分发中。Windows Essentials installer使InnoDB成为Windows上MySQL的默认表。

InnoDB被用来在众多需要高性能的大型数据库站点上产生。著名的Internet新闻站点Slashdot.org运行在InnoDB上。Mytrix Inc.在InnoDB上存储超过1TB的数据,还有一些其它站点在InnoDB上处理平均每秒800次插入/更新的负荷。

简单概括几点如下:

1. 通过以上不难看出,myIsam InnoDB的用途,myisam主要适用于中小型数据量。InnoDB引擎适用于大数据量。上面已经讲得很清楚拉。著名的开源电子商务系统[magento]就是采用InnoDB创建。

2. myIsam写入速度比InnoDB快。

3. 在使用InnoDB时候需要对my.cnf进行配置以保证MySQL达到最大效率。详细可以查看官网[inndo性能调节]:
http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#innodb-tuning

其中有很多人在网上发表了关于mysql myIdam和InnoDB在存贮和读取方面的差异。暂时还没有做过度研究。

基本测试都是基于使用[事务]和不使用[事务],进行对比。MySQL对于[非事务表]速度会比较块。

原因:待查证。

猜测:设定了innodb_flush_log_at_trx_commit如果设置为1的话,那么每次插入数据的时候都会自动提交,导致性能急剧下降,应该是跟刷新日志有关系,设置为0效率能够看到明显提升,当然,同样你可以SQL中提交[SET AUTOCOMMIT = 0]来设置达到好的性能。另外,还听说通过设置innodb_buffer_pool_size能够提升InnoDB的性能。

通过上面的分析,在我们采用MySQL存储引擎的时候要按需分配。针对不同的存储引擎要采用不同的数据设计。

题目2:开发过程中,遇到糟糕的SQL语句你是怎么解决的。

答:使用MySQL的[EXPLAIN]对SQL进行解释。应该还有更多好方法。

MySQL常见问题可以查看:http://www.blags.org/mysql-error-daquan-and-solutions/

MySQL存储引擎的介绍 :http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html

以上如有不足之处,请大家帮忙补充,THK。

作者:

Martin

博客地址:www.blags.org
原来网址www.blags.cn,后来遭到 cnnic禁止就没有使用了。
从事网络开发多年.工作过的公司: WebCrewChina
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: