前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYISAM和InnoDB比较。

MYISAM和InnoDB比较。

作者头像
碧海长天
发布2021-10-21 15:54:55
2.9K0
发布2021-10-21 15:54:55
举报
文章被收录于专栏:golang探索者

MYISAM和InnoDB比较。

2017-5-20

先给结论:这两种类型的表各有优劣,具体使用应根据应用而定。

基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。

接下来的具体不同的说明。

1.InnoDB中不保存表的具体行数,而MYISAM对是单独存起来的。也就是说select count(*) from table 时,MYISAM会比InnoDB快的多。

    我做过比较。同样的两张表内,有同样的1亿条数据。使用select count(*) from table,实验查询的时间。

    第一张是查询InnoDB的。   22.2秒

    第二张是查询MYISAM的 4毫秒

    两者根本不在一个数量级上,这是最好的证明。 当然如果不是1亿条数据,而是10条。 那就没多少区别了~

2. InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

3. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;这没什么好说的,想用外键的话,就用InnoDB

4.InnoDB不支持FULLTEXT类型的索引。 但mysql对中文分词不太友好,所以全文索引对我来说也一直没什么用处。因为还需要分词后再存储。还不如用ElasticSearch呢。可参考我开发对ElasticSearch插件哦。 http://www.slidyy.com/post-26.html 分词、查询、存储、日志强大对搜索引擎。

5.InnoDB支持数据行锁定,MyISAM不支持行锁定,只支持锁定整个表。 个人认为,这才是大多数人吐槽MYISAM对原因吧。因为事务功能可以通过代码弥补。但锁表可是性能但罪魁祸首。

因此,高并发插入但情况下,innodb完胜MYISAM。但若是只读的化,因为是共享锁,不影响查询,倒也没什么影响。所以,要根据业务需求来定制表类型。    

    即:insert、update多的用innodb。select delete多的用MYISAM。

总结,以上只是原则上的问题。是建表时需要考虑的。实际情况复杂多样,常常面临抉择与牺牲。这时候就要根据对业务方向对判断来建表了,但后期维护时,也经常会遇到修改表结构但情况。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MYISAM和InnoDB比较。
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档