电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Innodb与Myisam的区别解析

12页
  • 卖家[上传人]:m****
  • 文档编号:56117490
  • 上传时间:2018-10-09
  • 文档格式:DOCX
  • 文档大小:28.15KB
  • / 12 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、InnodbInnodb 与与 MyisamMyisam 的区别解析的区别解析1、MyISAM:默认表类型,它是基于传统的 ISAM 类型,ISAM 是 Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键,如果执行大量的 select,insert MyISAM 比较适合。2、InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的 update 和 insert,建议使用 InnoDB,特别是针对多个并发和 QPS 较高的情况。一、表锁差异MyISAM:myisam 只支持表级锁,用户在操作 myisam 表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足 insert 并发的情况下,可以在表的尾部插入新的数据。也可以通过 lock table 命令来锁表,这样操作主要是可以模仿事务,但是消耗非常大,一般只在实验演示中使用。InnoDB :Innodb 支持事务和行级锁,是 innodb 的最大特色

      2、。事务的 ACID 属性:atomicity,consistent,isolation,durable。并发事务带来的几个问题:更新丢失,脏读,不可重复读,幻读。事务隔离级别:未提交读(Read uncommitted),已提交读(Read committed),可重复读(Repeatable read),可序列化(Serializable)四种隔离级别的比较读数据一致性及并发副作用隔离级别读数据一致性脏读不可重复读幻读为提交读(read uncommitted)最低级别,不读物理上顺坏的数据是是是已提交读(read committed)语句级否是是可重复读(Repeatable red)事务级否否是可序列化(Serializable)最高级别,事务级否否否查看 mysql 的默认事务隔离级别“show global variables like tx_isolation; ”Innodb 的行锁模式有以下几种:共享锁,排他锁,意向共享锁(表锁),意向排他锁(表锁),间隙锁。天地棋牌 http:/注意:当语句没有使用索引,innodb 不能确定操作的行,这个时候就使用的意向锁,也就是表

      3、锁关于死锁:什么是死锁?当两个事务都需要获得对方持有的排他锁才能完成事务,这样就导致了循环锁等待,也就是常见的死锁类型。解决死锁的方法:1、 数据库参数2、 应用中尽量约定程序读取表的顺序一样3、 应用中处理一个表时,尽量对处理的顺序排序4、 调整事务隔离级别(避免两个事务同时操作一行不存在的数据,容易发生死锁)二、数据库文件差异MyISAM :myisam 属于堆表myisam 在磁盘存储上有三个文件,每个文件名以表名开头,扩展名指出文件类型。.frm 用于存储表的定义.MYD 用于存放数据.MYI 用于存放表索引myisam 表还支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)动态表压缩表InnoDB :innodb 属于索引组织表innodb 有两种存储方式,共享表空间存储和多表空间存储两种存储方式的表结构和 myisam 一样,以表名开头,扩展名是.frm。如果使用共享表空间,那么所有表的数据文件和索引文件都保存在一个表空间里,一个表空间可以有多个文件,通过 innodb_data_file_path 和 innodb_data_home_dir 参

      4、数设置共享表空间的位置和名字,一般共享表空间的名字叫 ibdata1-n。如果使用多表空间,那么每个表都有一个表空间文件用于存储每个表的数据和索引,文件名以表名开头,以.ibd 为扩展名。三、索引差异1、关于自动增长myisam 引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。innodb 引擎的自动增长咧必须是索引,如果是组合索引也必须是组合索引的第一列。2、关于主键myisam 允许没有任何索引和主键的表存在,myisam 的索引都是保存行的地址。innodb 引擎如果没有设定主键或者非空唯一索引,就会自动生成一个 6 字节的主键(用户不可见)innodb 的数据是主索引的一部分,附加索引保存的是主索引的值。3、关于 count()函数myisam 保存有表的总行数,如果 select count(*) from table;会直接取出出该值innodb 没有保存表的总行数,如果使用 select count(*) from table;就会遍历整个表,消耗相当大,但是在加了 wehre 条件后,myisam 和 innodb

      5、处理的方式都一样。4、全文索引myisam 支持 FULLTEXT 类型的全文索引innodb 不支持 FULLTEXT 类型的全文索引,但是 innodb 可以使用 sphinx 插件支持全文索引,并且效果更好。(sphinx 是一个开源软件,提供多种语言的 API 接口,可以优化mysql 的各种查询)5、delete from table使用这条命令时,innodb 不会从新建立表,而是一条一条的删除数据,在 innodb 上如果要清空保存有大量数据的表,最 好不要使用这个命令。(推荐使用 truncate table,不过需要用户有 drop 此表的权限)6、索引保存位置myisam 的索引以表名+.MYI 文件分别保存。innodb 的索引和数据一起保存在表空间里。四、开发的注意事项1、可以用 show create table tablename 命令看表的引擎类型。2、对不支持事务的表做 start/commit 操作没有任何效果,在执行 commit 前已经提交。3、可以执行以下命令来切换非事务表到事务(数据不会丢失),innodb 表比 myisam 表更安全:alt

      6、er table tablename type=innodb;或者使用 alter table tablename engine = innodb;4、默认 innodb 是开启自动提交的,如果你按照 myisam 的使用方法来编写代码页不会存在错误,只是性能会很低。如何在编写代码时候提高数据库性能呢?a、尽量将多个语句绑到一个事务中,进行提交,避免多次提交导致的数据库开销。b、在一个事务获得排他锁或者意向排他锁以后,如果后面还有需要处理的 sql 语句,在这两条或者多条 sql 语句之间程序应尽量少的进行逻辑运算和处理,减少锁的时间。c、尽量避免死锁d、sql 语句如果有 where 子句一定要使用索引,尽量避免获取意向排他锁。f、针对我们自己的数据库环境,日志系统是直插入,不修改的,所以我们使用混合引擎方式,ZION_LOG_DB 照旧使用 myisam 存储引擎,只有ZION_GAME_DB,ZION_LOGIN_DB,DAUM_BILLING 使用 Innodb 引擎。五、究竟该怎么选择下面先让我们回答一些问题:你的数据库有外键吗?你需要事务支持吗?你需要全文索引吗?你经常使用

      7、什么样的查询模式?你的数据有多大?myisam 只有索引缓存innodb 不分索引文件数据文件 innodb buffermyisam 只能管理索引,在索引数据大于分配的资源时,会由操作系统来 cache;数据文件依赖于操作系统的 cache。innodb 不管是索引还是数据,都是自己来管理思考上面这些问题可以让你找到合适的方向,但那并不是绝对的。如果你需要事务处理或是外键,那么 InnoDB 可能是比较好的方式。如果你需要全文索引,那么通常来说 MyISAM 是好的选择,因为这是系统内建的,然而,我们其实并不会经常地去测试两百万行记录。所以,就算是慢一点,我们可以通过使用 Sphinx 从 InnoDB 中获得全文索引。数据的大小,是一个影响你选择什么样存储引擎的重要因素,大尺寸的数据集趋向于选择 InnoDB 方式,因为其支持事务处理和故障恢复。数据库的在小决定了故障恢复的时间长短,InnoDB 可以利用事务日志进行数据恢复,这会比较快。而 MyISAM 可能会需要几个小时甚至几天来干这些事,InnoDB 只需要几分钟。操作数据库表的习惯可能也会是一个对性能影响很大的因素。比如:

      8、COUNT() 在 MyISAM 表中会非常快,而在 InnoDB 表下可能会很痛苦。而主键查询则在 InnoDB 下会相当相当的快,但需要小心的是如果我们的主键太长了也会导致性能问题。大批的 inserts 语句在 MyISAM 下会快一些,但是 updates 在 InnoDB 下会更快一些尤其在并发量大的时候。所以,到底你检使用哪一个呢?根据经验来看,如果是一些小型的应用或项目,那么MyISAM 也许会更适合。当然,在大型的环境下使用 MyISAM 也会有很大成功的时候,但却不总是这样的。如果你正在计划使用一个超大数据量的项目,而且需要事务处理或外键支持,那么你真的应该直接使用 InnoDB 方式。但需要记住 InnoDB 的表需要更多的内存和存储,转换 100GB 的 MyISAM 表到 InnoDB 表可能会让你有非常坏的体验。对于支持事务的 InnoDB 类型的表,影响速度的主要原因是 AUTOCOMMIT 默认设置是打开的,而且程序没有显式调用 BEGIN 开始事务,导致每插入一条都自动 Commit,严重影响了速度。可以在执行 sql 前调用 begin,多条 sql

      9、形成一个事务(即使 autocommit 打开也可以),将大大提高性能。InnoDBInnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力 (crash recovery capabilities)的事务安全(transaction-safe (ACID compliant)型表。 InnoDB 提供了行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non- locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。在InnoDB 表中不需要扩大锁定 (lock escalation),因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。 InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。InnoDB 的设计目标是处理大容量数据库系统,它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,一般为 2 GB。InnoDB 所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。MyISAMMyISAM 是 MySQL 缺省存贮引擎 .每张 MyISAM 表被存放在三个文件 。frm 文件存放表格定义。 数据文件是 MYD (MYData) 。 索引文件是 MYI (MYIndex) 引伸。因为 MyISAM 相对简单所以在效率上要优于 InnoDB小型应用使用 MyISAM 是不错的选择.易火棋牌 http:/MyISAM 表是保存成文件的形式,在跨平台的数据转移中使用 MyISAM 存储会省去不少的麻烦以下是

      《Innodb与Myisam的区别解析》由会员m****分享,可在线阅读,更多相关《Innodb与Myisam的区别解析》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.