Mysql为什么企业一般使用InnoDB引擎而不是使用效率更高的MyISAM引擎?

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

  1. 首先MyISAM是不支持事物的,而且没有像InnoDB支持外部键这种高级数据库功能

  2. MyISAM引擎的锁机制:

       MyISAM存储引擎的读锁和写锁是互斥的,这两个锁都是表级别的锁,读写操作是串行的。当一个进程请求MyISAM某张表的读锁的时候,同时另一个进程也请求该表的写锁,这时候写进程会优先获取到写锁。不仅如此,即使读请求先到达锁等待队列,写请求后到,写锁也会插入到读锁请求之前,这是由于mysql 认为写请求一般比读请求重要,所以MyISAM表不太适合有大量更新操作和查询操作的应用,因为大量的更新操作会造成查询操作一直获取不到读锁,发生长时间或者永远阻塞。

      另外mysql表级别锁有两种模式:表共享读锁和表独占写锁。当MyISAM表进行读操作时,它不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写操作。对MyISAM表的写操作则会阻塞其他用户对同一表的读操作和写操作。

另外补充:

      InnoDB一般来说是基于行锁的,而行锁是通过给索引项加锁来实现的,即只有通过索引条件来检索数据,InnoDB才会使用行锁,佛则使用表锁,而行锁在每次获取锁和释放锁操作需要消耗的资源多于表锁。

    比如:update table set num=1 where name like “%aaa%”。这种情况InnoDB就不会使用行锁。

     InnoDB提供事物安全表,具有提交、回滚合崩溃恢复能力的是事物安全保证。但是不支持全文索引。

转载于:https://my.oschina.net/u/1581079/blog/608657

你可能感兴趣的:(Mysql为什么企业一般使用InnoDB引擎而不是使用效率更高的MyISAM引擎?)