`

MySQL数据库MyISAM和InnoDB存储引擎的比较

阅读更多

      MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。这里介绍关于这两种引擎的一些基本概念(非深入介绍)。

 

MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键。每张MyISAM表存放在三个文件中:frm 文件存放表格定义;数据文件是MYD (MYData);索引文件是MYI (MYIndex)。

 

InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,如果在执行一 个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作时的SQL语句),以及提供与Oracle类型一致的不加锁 读取方式。InnoDB存储它的表和索引在一个表空间中,表空间可以包含数个文件。

 

      主要区别:

 

  • MyISAM是非事务安全型的,而InnoDB是事务安全型的。
  • MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
  • MyISAM支持全文类型索引,而InnoDB不支持全文索引。
  • MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
  • MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
  • InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。

 

      应用场景:

 

  • MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
  • InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

 

      以下是一些细节和具体实现的差别:

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

 

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

 

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

 

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

 

  ◆5.LOAD TABLE FROMMASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

 

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

 

  两种类型最主要的差别就是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表做一些selectcount(*)操作,非常适合大项目总量约几亿的rows某一类型(如日志,调查统计)的业务表。

 

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

 

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

 

分享到:
评论

相关推荐

    白色卡通风格响应式游戏应用商店企业网站模板.zip

    白色卡通风格响应式游戏应用商店企业网站模板.zip

    48页-智慧工地监管平台解决方案.pdf

    智慧工地,作为现代建筑施工管理的创新模式,以“智慧工地云平台”为核心,整合施工现场的“人机料法环”关键要素,实现了业务系统的协同共享,为施工企业提供了标准化、精益化的工程管理方案,同时也为政府监管提供了数据分析及决策支持。这一解决方案依托云网一体化产品及物联网资源,通过集成公司业务优势,面向政府监管部门和建筑施工企业,自主研发并整合加载了多种工地行业应用。这些应用不仅全面连接了施工现场的人员、机械、车辆和物料,实现了数据的智能采集、定位、监测、控制、分析及管理,还打造了物联网终端、网络层、平台层、应用层等全方位的安全能力,确保了整个系统的可靠、可用、可控和保密。 在整体解决方案中,智慧工地提供了政府监管级、建筑企业级和施工现场级三类解决方案。政府监管级解决方案以一体化监管平台为核心,通过GIS地图展示辖区内工程项目、人员、设备信息,实现了施工现场安全状况和参建各方行为的实时监控和事前预防。建筑企业级解决方案则通过综合管理平台,提供项目管理、进度管控、劳务实名制等一站式服务,帮助企业实现工程管理的标准化和精益化。施工现场级解决方案则以可视化平台为基础,集成多个业务应用子系统,借助物联网应用终端,实现了施工信息化、管理智能化、监测自动化和决策可视化。这些解决方案的应用,不仅提高了施工效率和工程质量,还降低了安全风险,为建筑行业的可持续发展提供了有力支持。 值得一提的是,智慧工地的应用系统还围绕着工地“人、机、材、环”四个重要因素,提供了各类信息化应用系统。这些系统通过配置同步用户的组织结构、智能权限,结合各类子系统应用,实现了信息的有效触达、问题的及时跟进和工地的有序管理。此外,智慧工地还结合了虚拟现实(VR)和建筑信息模型(BIM)等先进技术,为施工人员提供了更为直观、生动的培训和管理工具。这些创新技术的应用,不仅提升了施工人员的技能水平和安全意识,还为建筑行业的数字化转型和智能化升级注入了新的活力。总的来说,智慧工地解决方案以其创新性、实用性和高效性,正在逐步改变建筑施工行业的传统管理模式,引领着建筑行业向更加智能化、高效化和可持续化的方向发展。

    基于卷积神经网络的AV1视频编码环路滤波技术

    内容概要:本文提出了一种基于卷积神经网络(CNN)的AV1视频编码环路滤波方法。该方法利用深度可变的简单网络结构SimNet,针对不同量化参数(QP)调整网络深度,从而提高编码效率和视觉质量。同时,作者提出了一种适用于INTER编码的跳过增强策略,以避免重复增强导致的图像质量下降。实验结果表明,该方法在INTRA和INTER编码模式下分别实现了平均7.27%和5.57%的BD-rate降低,且在编码时间上优于AV1基准。 适合人群:视频编码研究人员、AI开发者、多媒体技术专家。 使用场景及目标:适用于提升视频压缩编码的效率和视觉质量,特别是对于AV1视频编码标准的应用。 其他说明:该方法不仅提高了编码效率和视觉质量,还降低了计算复杂度。

    白色简洁风格的商业投资组合网站HTML5模板.zip

    白色简洁风格的商业投资组合网站HTML5模板.zip

    在线式缠绕膜机自动覆膜缠绕机sw16全套技术资料100%好用.zip

    在线式缠绕膜机自动覆膜缠绕机sw16全套技术资料100%好用.zip

    (176109030)基于ESO的永磁同步电机无感FOC1.采用线性扩张状态观测器(LESO)估计电机反电势,利用锁相环从反电势中提取位置和转速信息

    基于ESO的永磁同步电机无感FOC 1.采用线性扩张状态观测器(LESO)估计电机反电势,利用锁相环从反电势中提取位置和转速信息,从而实现无位置传感器控制; 2.提供算法对应的参考文献和仿真模型。 购买赠送PMSM控制相关电子资料。 仿真模型纯手工搭建,不是从网络上复制得到。 仿真模型仅供学习参考。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    白色简洁风格的酒店展示及预订企业网站源码下载.zip

    白色简洁风格的酒店展示及预订企业网站源码下载.zip

    白色简洁风格的享受旅行导航指南整站网站源码下载.zip

    白色简洁风格的享受旅行导航指南整站网站源码下载.zip

    白色简洁风格的照片浏览切换源码下载.rar

    白色简洁风格的照片浏览切换源码下载.rar

    白色简洁风格的女装商城整站网站源码下载.zip

    白色简洁风格的女装商城整站网站源码下载.zip

    EnvironmentError.md

    EnvironmentError.md

    白色简洁风格的举重锻炼健身企业网站模板.zip

    白色简洁风格的举重锻炼健身企业网站模板.zip

    html+css+js网页设计 美食 家美食1个页面

    预览地址:https://blog.csdn.net/qq_42431718/article/details/144758683 html+css+js网页设计 美食 家美食1个页面

    白色简洁风格的室内家具展示企业网站源码下载.zip

    白色简洁风格的室内家具展示企业网站源码下载.zip

    白色简洁风格的婚礼活动展示信息源码下载.zip

    白色简洁风格的婚礼活动展示信息源码下载.zip

    Python绘制圣诞树:文本和图形实现

    内容概要:本文详细介绍了使用Python绘制圣诞树的方法,包括简单的文本圣诞树、使用Turtle库绘制复杂图形圣诞树,以及添加装饰和动态效果的高级应用。文章通过代码示例和详细的解释,逐步展示了如何实现不同风格的圣诞树。 适合人群:Python初学者,特别是对图形编程感兴趣的读者。 使用场景及目标:① 学习如何使用Python的字符串操作和循环结构绘制文本圣诞树;② 掌握Turtle库的基本用法,绘制复杂的图形圣诞树;③ 添加装饰和动态效果,提升节日氛围。 阅读建议:建议读者跟随代码示例进行实践,结合注释和解释,更好地理解和掌握每个步骤的实现方法。

    白色简洁风格的宴席精致餐饮整站网站源码下载.zip

    白色简洁风格的宴席精致餐饮整站网站源码下载.zip

    基于STM32f103的红外测温仪程序(测温模块MLX90614,芯片GY906)

    采用STM32F103系列作为主控,利用MLX90614采集温度,配以OLED显示以及flash存储数据

    html渲染器,粘贴html代码到这个渲染器即可渲染出对应的效果

    html渲染器,粘贴html代码到这个渲染器即可渲染出对应的效果

    在线教育平台:课程管理与学习分析

    随着学业负担的日益加重,越来越多的学生选择通过家教、自学或参加补习班来加强课外学习。然而,家教费用高昂,自学效率低下且难以及时解决疑难问题,而补习班则受限于时间和地点,灵活性不足。此外,国家政策也不鼓励校外补习。鉴于网络技术的成熟和各类在线平台的兴起,开发一个专业的在线辅助学习网站对于辅助学生的课外学习显得尤为重要。 本在线教育系统基于Vue.js构建,采用B/S架构设计,后端语言为Java,数据库使用MySQL。通过整合Vue.js技术,系统界面更加丰富和友好。系统主要面向课程购买用户,涉及的角色包括管理员、学生和教师。学生可以注册登录后浏览课程视频、收藏课程、留言并购买课程,同时实现订单管理。管理员负责管理学生信息、课程信息、发布班级和管理章节等。教师则可以管理课程订单、课程内容和章节。该系统允许学生利用碎片时间自主学习,具有很高的灵活性,对于难以理解的课程可以反复学习并在线提问,极大地促进了学生的学习。

Global site tag (gtag.js) - Google Analytics