理解存储引擎MyISAM与InnoDB

MyISAM与InnoDB对比
本文详细对比了MySQL中的两种存储引擎:MyISAM和InnoDB。MyISAM适用于大量SELECT和INSERT操作,不支持事务和外键;InnoDB支持事务安全、行级锁定和外键,适合高并发更新和插入场景。文章还介绍了如何在应用中避免死锁,以及不同引擎下COUNT()函数的性能差异。

1、MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键,如果执行大量的select,insert   MyISAM比较适合

2、InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况

事务的ACID属性:atomicity,consistent,isolation,durable。

关于死锁:

什么是死锁?当两个事务都需要获得对方持有的排他锁才能完成事务,这样就导致了循环锁等待,也就是常见的死锁类型。

解决死锁的方法:

1、  数据库参数

2、  应用中尽量约定程序读取表的顺序一样

3、  应用中处理一个表时,尽量对处理的顺序排序

4、  调整事务隔离级别(避免两个事务同时操作一行不存在的数据,容易发生死锁)

3、关于count()函数

myisam保存有表的总行数,如果select count(*) from table;会直接取出出该值

innodb没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre       条件后,myisam和innodb处理的方式都一样。

 

1、可以用 show create table tablename 命令看表的引擎类型。

3、可以执行以下命令来切换非事务表到事务(数据不会丢失),innodb表比myisam表更安全:alter table tablename type=innodb;
  或者使用 alter table tablename engine = innodb;

下面先让我们回答一些问题:   

◆你的数据库有外键吗?   

◆你需要事务支持吗?   

◆你需要全文索引吗?   

◆你经常使用什么样的查询模式?   

◆你的数据有多大?   

参考:

https://www.cnblogs.com/y-rong/p/8110596.html

 

转载于:https://www.cnblogs.com/iloverain/p/9623447.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值