MyISAM读什么 MyISAM读音 MyISAM的正确读法

MyISAM是MySQL的一种存储引擎,读音为[maiˈzæm]

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
MyISAM InnoDB 区别 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,   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左右。
### 回答1: MyISAM 效率高于 InnoDB 的原因主要有以下几个: 1. MyISAM 是基于表的锁定机制,而 InnoDB 是基于行的锁定机制。这意味着 MyISAM取时只需要锁定整个表,而 InnoDB 需要锁定每一行,这会导致 InnoDB 在取大量数据时效率较低。 2. MyISAM 不支持事务处理,而 InnoDB 支持。虽然事务处理能够保证数据的完整性和一致性,但是在一些场景下并不需要事务处理,此时 MyISAM 会比 InnoDB 更高效。 3. MyISAM 不支持外键约束,而 InnoDB 支持。外键约束虽然可以保证数据的一致性和完整性,但是也会降低性能。 需要注意的是,虽然 MyISAM取方面有优势,但是它在写入方面的效率较低,而 InnoDB 在处理大量写入操作时更为高效。因此,在选择存储引擎时需要根据实际情况进行权衡。 ### 回答2: MyISAMMySQL的一种存储引擎,而InnoDB是另一种存储引擎。虽然在某些方面,InnoDB 优于 MyISAM,但是 MyISAM效率往往高于 InnoDB。以下是几个可能的原因: 1. 索引结构:MyISAM 使用的是 B+ 树索引结构,而 InnoDB 使用的是 B 树索引结构。B+ 树索引结构在查询过程中经常直接定位到叶子节点,因此在取数据时效率更高。 2. 缓存机制:MyISAM 使用的是表级锁,取时只锁定整个表,开销较小。与之相比,InnoDB 使用的是行级锁,锁定的粒度更细,但对于大量并发取的情况下,锁的开销可能变得较大,从而影响了取效率。 3. 数据页大小:MyISAM 默认使用 4KB 的数据页大小,而 InnoDB 默认使用 16KB 的数据页大小。较小的数据页大小可以提高内存的利用率,减少了磁盘 I/O 操作的次数,从而提高了取效率。 需要注意的是,InnoDB 在其他方面的优势也是非常明显的,例如支持事务、崩溃恢复等等。因此,在选择存储引擎时,需要根据实际情况进行权衡,根据具体需求选择适合的存储引擎。 ### 回答3: MyISAM效率高于InnoDB是因为两者在数据存储和访问方式上存在差异。 首先,MyISAM表的数据存储结构是基于表的形式,数据文件和索引文件是分开存储的。这种存储方式使得MyISAM表在执行取操作时更加快速。因为在取操作中,不需要处理事务和锁定操作,MyISAM表可以直接访问数据,避免了额外的开销。 相比之下,InnoDB表的数据存储结构是基于聚簇索引(clustered index),即将数据直接存储在按照主键排序的B+树中。这种存储方式使得InnoDB表在执行写操作和处理大量并发访问时更加高效。然而,由于每个表都有自己的索引结构,InnoDB表在执行操作时需要进行更多的I/O操作,导致其效率相对较低。 此外,MyISAM表不支持事务,并且只支持表级别的锁定,这也为其提供了更快的取速度。而InnoDB表支持事务和行级别的锁定,这些功能会增加额外的开销,导致其在取数据时速度较慢。 综上所述,虽然InnoDB表在处理写操作和并发访问时具有更好的性能,但在纯取操作方面,MyISAM表由于其特定的存储结构和不支持事务的特性,使得其取效率高于InnoDB表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值