• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
小锅876
博客园    首页    新随笔    联系   管理    订阅  订阅
数据库InnoDB

MyISAM会存储总行数,InnoDB不会,需要按行扫描。对于数据量大的表不要轻易选择count(*)。

MyISAM只有查询整个表的合计行时才会直接返回结果。条件查询时两个存储引擎处理方法类似。

全文索引

全文索引是用于检索字段中是否包含或不包含指定的关键字,有点像搜索引擎的功能,其内部的索引结构采用的是与搜索引擎相同的倒排索引结构,其原理是对字段中的文本进行分词,然后为每一个出现的单词记录一个索引项,这个索引项中保存了所有出现过该单词的记录的信息,也就是说在索引中找到这个单词后,就知道哪些记录的字段中包含这个单词了。因此适合用大文本字段的查找。

MyISAM支持全文索引,InnoDB5.6之前不支持。

在数据量大、并发量大的情况下,都不该使用数据库自带的全文索引,会导致少量请求占用大量数据库资源,但是应该用外部索引的设计方法。

事务

MyISAM不支持事务,InnoDB支持事务。但MyISAM可以锁定table来实现类似十五点东西,但是对数据库性能影响很大。

外键

MyISAM不支持外键,InnoDB支持外键。在数据量大,并发量大的情况下,都不该使用外键,建议应用程序确保完整性。

行锁和表锁

MyISAM只支持表锁,在数据量大、并发量高时性能下降很大。

InnoDB支持行锁,数据量大、并发高时性能好。

MyISAM用于插入业务,因为文末添加记录很快。

公共坑:InnoDB行锁基于索引,不是物理行记录。当没有命中索引时就不能使用行锁,退为表锁。

总结:

在大数据量、高并发的互联网业务场景下,对于MyISAM和InnoDB

在where条件下,count(*)两个存储引擎的性能相似。

您应该使用

外部索引

的设计方案

事务影响性能,强一致性要求使用事务。

不使用外键,应用程序保证完整性。

InnoDB不能在不命中索引的情况下使用行锁。

结论

数据量大、并发度高的互联网业务场景请使用InnoDB:

行锁对提高并发性有很大帮助。

posted on 2022-08-18 10:39  小锅876  阅读(34)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3