`
jj7878jj
  • 浏览: 10698 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

MyISAM和InnoDB你必知必会的几点区别。面试题哦

 
阅读更多
开篇跟大家推荐我自己也在使用的PHP视频教程

我自己也是搜寻了很多网上的资料,发现现在使用的PHP视频教程常不错!
希望对和我一样喜欢自学的朋友,一起实现理想!
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.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

  另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

  两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。

  我作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,但是从我目前运维的数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是我的首选。

  原因如下:

  1、首先我目前平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的。

  2、MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。

  3、从平台角度来说,经常隔1,2个月就会发生应用开发人员不小心update一个表where写的范围不对,导致这个表没法正常用了,这个时候MyISAM的优越性就体现出来了,随便从当天拷贝的压缩包取出对应表的文件,随便放到一个数据库目录下,然后dump成sql再导回到主库,并把对应的binlog补上。如果是Innodb,恐怕不可能有这么快速度,别和我说让Innodb定期用导出xxx.sql机制备份,因为我平台上最小的一个数据库实例的数据量基本都是几十G大小。

  4、从我接触的应用逻辑来说,select count(*) 和order by 是最频繁的,大概能占了整个sql总语句的60%以上的操作,而这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是where对它主键是有效,非主键的都会锁全表的。

  5、还有就是经常有很多应用部门需要我给他们定期某些表的数据,MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。

  6、如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表架构来解决。

  7、如果是用MyISAM的话,merge引擎可以大大加快应用部门的开发速度,他们只要对这个merge表做一些select count(*)操作,非常适合大项目总量约几亿的rows某一类型(如日志,调查统计)的业务表。

  当然Innodb也不是绝对不用,用事务的项目如模拟炒股项目,我就是用Innodb的,活跃用户20多万时候,也是很轻松应付了,因此我个人也是很喜欢Innodb的,只是如果从数据库平台应用出发,我还是会首选MyISAM。

  另外,可能有人会说你MyISAM无法抗太多写操作,但是我可以通过架构来弥补,说个我现有用的数据库平台容量:主从数据总量在几百T以上,每天十多亿 pv的动态页面,还有几个大项目是通过数据接口方式调用未算进pv总数,(其中包括一个大项目因为初期memcached没部署,导致单台数据库每天处理 9千万的查询)。而我的整体数据库服务器平均负载都在0.5-1左右。
分享到:
评论

相关推荐

    mysql面试题,MySQL面试题及答案 ,MySQL面试题部分,发现网上很多MySQL面试题及答案整理都没有答案

    mysql面试题,MySQL面试题及答案 ;简述在MySQL数据库中MyISAM和InnoDB的区别;主键索引与唯一索引的区别;如何在Unix和Mysql时间戳之间进行转换;MyISAM表格将在哪里存储,并且还提供其存储格式;什么是非标准字符...

    最全mysql面试题-mysql-面试题

    最全MySQL面试60题和答案 1.Mysql中有哪几种锁? 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率...

    mysql 中InnoDB和MyISAM的区别分析小结

    InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,...

    mysql面试题100题,包含答案和解析.docx

    mysql面试题,包含总共100题,并且附带详细答案和解析,部分面试题如下: 1、MySQL 索引使用有哪些注意事项呢? 2、MySQL 遇到过死锁问题吗,你是如何解决的? 3、日常工作中你是怎么优化SQL的? 4、InnoDB与MyISAM...

    校园招聘计算机岗位MySQL面试题

    以下是一份校园招聘计算机岗位MySQL面试题,包含5道基础知识题目,5道高阶SQL知识题目和3道MySQL编程题目,以及答案供参考。 基础知识题目: 1. 什么是关系型数据库管理系统?为什么MySQL被广泛使用? 答:关系型...

    最全MySQL面试60题和答案

    最全MySQL面试60题和答案 Mysql 中有哪几种锁? Mysql 中有哪些不同的表格? 简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别 Mysql 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区 别? CHAR 和 VARCHAR ...

    常见(MySQL)面试题(含答案).docx

    MyisAM和innodb的有关索引的疑问 innodb为什么要用自增id作为主键 MySql索引是如何实现的 说说分库与分表设计(面试过) 聚集索引与非聚集索引的区别 事务四大特性(ACID)原子性、一致性、隔离性、持久性? 事务的...

    高频的50个 MySQL 面试题含详细讲解

    MySQL面试题以及答案整理【最新版】MySQL高级面试题大全,发现网上很多MySQL面试题都没有答案,所以花了很长时间搜集,本套MySQL面试题大全,汇总了大量经典的MySQL程序员面试题以及答案,包含MySQL语言常见面试题、...

    mysql面试题,mysql面试题

    mysql面试题 MySQL中有哪几种锁? MySQL中有哪些不同的表现形式? 简单描述在MySQL数据库中MyISAM和InnoDB的区域 MySQL中InnoDB支持的四种事务隔离级别别名 CHAR 和 VARCHAR 的区别? 主键和候选键有什么区别? ...

    Mysql面试题60个带答案

    ## 最全MySQL面试60题和答案 #### 1.Mysql中有哪几种锁? 1. 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 2. 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生...

    史上最全 55道 MySQL面试题及答案,看完碾压面试官

    MySQL面试题以及答案整理【最新版】MySQL高级面试题大全,发现网上很多MySQL面试题都没有答案,所以花了很长时间搜集,本套MySQL面试题大全,汇总了大量经典的MySQL程序员面试题以及答案,包含MySQL语言常见面试题、...

    桌面运维HELPDESK常用面试题

    6. MySQL中InnoDB存储引擎和MyISAM存储引擎有什么区别 InnoDB支持事务,MyISAM不支持; InnoDB数据存储在共享表空间,MyISAM数据存储在文件中; InnoDB支持行级锁,MyISAM只支持表锁; InnoDB支持崩溃后的恢复,...

    【MySQL面试题干货集合】20个经典常用面试题-需要找工作的一定要看 共11页.pdf

    【MySQL】20个经典面试题 I 1 MySQL的复制原理以及流程 1 2 MySQL中MyISAM与InnoDB的区别,至少5点 1 2.1 MyISAM与InnoDB的5个不同点; 1 2.2 InnoDB引擎的4大特性 1 2.3 两者select count(*)哪个更快,为什么? 2 3 ...

    大厂Mysql面试题在这里

    2、MySQL中myisam与innodb的区别,至少5点 (1)、问5点不同; 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不...

    mysql面试题.docx

    mysql面试题.docx Mysql中有哪几种锁? 1.表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 2.行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,...

    Mysql经典面试题,问题+答案

    简述在MySQL数据库中MyISAM和InnoDB的区别 MyISAM: 不支持事务,但是每次查询都是原子的; 支持表级锁,即每次操作是对整个表加锁; 存储表的总行数; 一个MYISAM表有三个文件:索引文件、表结构文件、数据...

    MySQL终级面试题,提升你的内力,给你面试助力

    1、MySQL 中有哪几种锁? (1)表级锁:开销小,加锁快;不会出现死锁;...3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别 4、MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别

    MySQL面试题28道面试题

    2、MySQL中myisam与innodb的区别,至少5点 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 4、问了innodb的事务与日志的实现 5、MySQL binlog的几种日志录入格式以及区别 6、MySQL数据库cpu飙升到...

    MySQL面试题含答案

    4.MyISAM 和InnoDB 的区别? 5.MYSQL 支持事务吗?在缺省模式下,MYSQL 是 autocommit 模式的,所有的数据库更新操作都会即时提交, 所以在缺省情况下,mysql 是不支持事务的。 MYSQL 表类型是使用 InnoDB Tables 或...

    BAT面试突击资料.zip

    数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)..._mysql 面试题 2020

Global site tag (gtag.js) - Google Analytics