- InnoDB支持表、行(默认)级锁 , 而MyISAM仅支持表级锁
- InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列Row_id来充当默认主键) , 而Myisam可以没有主键
- Innodb存储文件有frm、ibd , 而Myisam是frm、MYD、MYI
- Innodb:frm是表定义文件 , ibd是数据文件
- Myisam:frm是表定义文件 , myd是数据文件 , myi是索引文件
- 对索引列使用了函数、表达式或运算符:当查询条件中使用了函数、表达式或运算符时 , MySQL就无法使用该列的索引 , 因为它需要对每行数据进行计算 , 而不是直接查找索引 。
- 查询条件中使用了不等于操作符(<>、!=)、NOT NULL, NOT IN 等
- 模糊查询:当查询条件中使用了LIKE、%或_等模糊匹配符号时 , MySQL无法使用索引进行快速定位 。
- OR条件:当查询条件中包含多个OR条件时 , MySQL无法使用索引进行快速定位 。
- 范围查询:当查询条件中使用了BETWEEN、<、>、<=、>=等操作符时 , MySQL只能使用索引中的一部分数据 , 需要读取更多的数据进行过滤 , 降低了查询效率 。
- 数据类型不匹配 , 需要隐式转换类型
- 对索引列进行排序 , 因为它需要将数据按照指定的顺序进行排序
- 复合索引 , 如果不使用前列 , 后续列也将无法使用
推荐阅读
- 带你读 MySQL 源码:Where 条件怎么过滤记录?
- 如何快速减掉小肚腩,5个消除内脏脂肪的秘诀,从168到122
- 有MySQL了,为什么还硬要搭个MongoDB集群?
- go语言中经常犯的错误
- MySQL Router高可用搭建,你学会了吗?
- 微软CEO:AI快速发展并不可怕
- 抖音小店评分怎么快速提高?
- Apache Iceberg 中引入索引提升查询性能
- 在 Meta 构建和部署 MySQL Raft
- 干香菇如何快速泡好
