mysql中myisam与innodb的区别

类型 myisam innodb
事务支持 不支持:查询更快,每次查询具有原子性 支持事务,回滚
锁粒度 表级锁 行级锁
外键 MyISAM不支持 InnoDB支持外键
表主键 允许没有任何索引和主键的表存在,索引都是保存行的地址 如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见)
全文索引 MyISAM支持 InnoDB不支持全文索引
可移植性、备份及恢复 数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作 免费的方案可以是拷贝数据文件、备份 binlog或者用mysqldump,在数据量达到几十G的时候就相对痛苦了

MySQL 表锁和行锁机制

  1. InnoDB 支持表锁和行锁,使用索引作为检索条件修改数据时采用行锁,否则采用表锁。
  2. InnoDB 自动给修改操作加锁,给查询操作不自动加锁
  3. 行锁可能因为未使用索引而升级为表锁,所以除了检查索引是否创建的同时,也需要通过 explain 执行计划查询索引是否被实际使用。
  4. 行锁相对于表锁来说,优势在于高并发场景下表现更突出,毕竟锁的粒度小。
  5. 当表的大部分数据需要被修改,或者是多表复杂关联查询时,建议使用表锁优于行锁。
  6. 为了保证数据的一致完整性,任何一个数据库都存在锁定机制。锁定机制的优劣直接影响到一个数据库的并发处理能力和性能。
  7. InnoDB的行锁是针对索引加的锁,不是针对记录加的锁。并且该索引不能失效,否则都会从行锁升级为表锁
上次更新时间: 2024/5/7 05:59:02