最近连续接到了两次tencent的电话面试,固然不是同一个部门。都涉及到了一个mysql的基础知识问题。为了防止第三次打电话来,备注下。^^。 题目1:讲讲你对mysql myisam,innodb的认识。而后你认为他们的区别在那里?为何? 答:这两个是mysql主要存储引擎。 简要介绍来自官网。 简要介绍:MyIsam MyISAM是 默认存储引擎。它基于更老的ISAM代码,但有不少有用的扩展。(注意MySQL 5.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次插入/更新的负荷。 简单归纳几点以下: 经过不上不难看出,MyIsam InnoDB的用途,Myisam主要适用于中小型数据量。InnoDB引擎适用于大数据量。上面已经讲得很清楚拉。著名的开源电子商务系统[magento]就是采用InnoDB建立。 MyIsam写入速度比InnoDB快。 在使用InnoDB时候须要对my.cnf进行配置以保证mysql达到最大效率。详细能够查看官网[inndo性能调节]:http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#innodb-tuning。 其中有不少人在网上发表了关于mysql MyIsam 和 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。