MyISAM会存储总行数,InnoDB不会,需要按行扫描。对于数据量大的表不要轻易选择count(*)。
MyISAM只有查询整个表的合计行时才会直接返回结果。条件查询时两个存储引擎处理方法类似。
全文索引
全文索引是用于检索字段中是否包含或不包含指定的关键字,有点像搜索引擎的功能,其内部的索引结构采用的是与搜索引擎相同的倒排索引结构,其原理是对字段中的文本进行分词,然后为每一个出现的单词记录一个索引项,这个索引项中保存了所有出现过该单词的记录的信息,也就是说在索引中找到这个单词后,就知道哪些记录的字段中包含这个单词了。因此适合用大文本字段的查找。
MyISAM支持全文索引,InnoDB5.6之前不支持。
在数据量大、并发量大的情况下,都不该使用数据库自带的全文索引,会导致少量请求占用大量数据库资源,但是应该用外部索引的设计方法。
事务
MyISAM不支持事务,InnoDB支持事务。但MyISAM可以锁定table来实现类似十五点东西,但是对数据库性能影响很大。
外键
MyISAM不支持外键,InnoDB支持外键。在数据量大,并发量大的情况下,都不该使用外键,建议应用程序确保完整性。
行锁和表锁
MyISAM只支持表锁,在数据量大、并发量高时性能下降很大。
InnoDB支持行锁,数据量大、并发高时性能好。
MyISAM用于插入业务,因为文末添加记录很快。
公共坑:InnoDB行锁基于索引,不是物理行记录。当没有命中索引时就不能使用行锁,退为表锁。
总结:
在大数据量、高并发的互联网业务场景下,对于MyISAM和InnoDB
在where条件下,count(*)两个存储引擎的性能相似。
您应该使用
外部索引
的设计方案
事务影响性能,强一致性要求使用事务。
不使用外键,应用程序保证完整性。
InnoDB不能在不命中索引的情况下使用行锁。
结论
数据量大、并发度高的互联网业务场景请使用InnoDB:
行锁对提高并发性有很大帮助。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!