MySQL myisam和innodb区别
2011-06-29 11:31
253 查看
http://www.lampbrother.net/php/bencandy.php?fid=70&id=1480
最近连续接到了两次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
最近连续接到了两次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
相关文章推荐
- MySQL存储引擎MyISAM与InnoDB的区别
- MySQL存储引擎MyISAM与InnoDB的主要区别对比
- Mysql 存储引擎中InnoDB与MyISAM区别(网络整理)
- mysql的引擎myisam和innodb的区别
- MySQL myisam和innodb区别
- Mysql 的存储引擎,myisam和innodb的区别
- MySQL存储引擎--MyISAM与InnoDB区别
- MySQL: MyISAM和InnoDB的区别
- MySQL存储引擎中的MyISAM和InnoDB区别详解
- Mysql引擎 Innodb和MyISAM的区别
- MySQL存储引擎中的MyISAM和InnoDB区别
- Mysql表的七种引擎类型,InnoDB和MyISAM引擎对比区别总结
- Mysql InnoDB和MyISAM的主要区别
- MySQL存储引擎MyISAM与InnoDB的9点区别
- MySQL中MyISAM和InnoDB的区别
- MySQL: MyISAM和InnoDB的区别
- MYisam和InnoDB区别以及MySQL引擎简介
- mysql中engine=innodb和engine=myisam的区别
- MySQL存储引擎中的MyISAM和InnoDB区别详解
- MySQL存储引擎 InnoDB 与 MyISAM 的区别