MySQL 优化---MySQL存储引擎InnoDB和MyISAM详解(一)

MySQL存储引擎InnoDB和MyISAM详解

参考文档:

什么是MySQL存储引擎

存储引擎说白了就是告诉MySQL如何存储数据、怎么样建立索引以及如何查询更新数据等的实现方法。

MySQL存储引擎之InnoDB

MySQL5.5 版本及之后默认存储引擎InnoDB,是MySQL推荐使用的存储引擎。支持事务,行级锁定,外键约束。事务安全型存储引擎。更加注重数据的完整性和安全性。

  • 数据存储格式
## 数据库数据文件存储位置,可以进行修改
[root@localhost test_orders]# pwd
/var/lib/mysql/test_orders
## test_orders 存储引擎是InnoDB ,查看数据库有哪些文件
[root@localhost test_orders]# ls
## db.opt存放了数据库的配置信息,比如数据库的字符集还有编码格式
db.opt 
## .frm文件是表结构文件:表结构、元数据(描述数据的数据)、和表结构定义信息
tb_order.frm 
##.ibd文件是表索引文件,包括了单独一个表的数据及索引内容
tb_order.ibd 
tb_user.frm 
tb_user.ibd
  • 数据存储特点

InnoDB表是基于聚簇索引建立的,聚簇索引对主键的查询有很高的性能,不过他的二级索引(非主键索引)必须包含主键列,索引其他
的索引会很大。

  • 锁的粒度

行锁

  • 事务支持

事务、外键约束 : 都是为了维护数据的完整性。
并发性处理:innodb擅长处理并发的。因为它使用了行级锁定,只该行锁了,其它行没有锁。
行级锁定:row-level locking,实现了行级锁定,在一定情况下,可以选择行级锁来提升并发性。也支持表级锁定,Innodb会自带锁,
不需要我们自己设置。

MySQL存储引擎之MyISAM

MySQL5.5版本之前默认的存储引擎。

  • 数据存储格式
## 数据库数据文件存储位置,可以进行修改
[root@localhost test_orders2]# pwd
/var/lib/mysql/test_orders2
##test_orders2存储引擎为:MyISAM 查看数据库有哪些文件
[root@localhost test_orders2]# ls
## db.opt存放了数据库的配置信息,比如数据库的字符集还有编码格式
db.opt 
## .frm文件是表结构文件:表结构、元数据(描述数据的数据)、和表结构定义信息
tb_order.frm
## .MYD存储表的数据
tb_order.MYD  
## 存储表的索引
tb_order.MYI  
tb_user.frm  
tb_user.MYD  
tb_user.MYI
  • 数据存储特点
    MyISAM是基于非聚簇索引进行存储的
  • 锁的粒度
    MyISAM不支持行锁,读取时会对表加上共享锁,在写入时对表加入排它锁,是对整表加锁,所以写入时效率会比较低
  • 事务支持
    不支持事务

InNoDB和MyISAM比较

对比项 InnoDB MyISAM
主外键 支持 支持
事务 支持 不 支持
行表锁 行锁:操作时值锁定某一行,不对其他行有影响 表锁:即使操作一条记录也会锁住整个表,不适合高并发的操作
缓存 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 只缓存索引,不缓存真实数据
表空间
关注点 事务 性能
默认安装 5.5及之后默认支持 5.5之前默认支持

Innodb :数据完整性,并发性处理,擅长更新,删除。
myisam:高速查询及插入。擅长插入和查询。
具体举例:

  1. 那么对于微博项目来看,选择哪一个存储引擎呢?
    a.微博主要是插入微博和查询微博列表,较为适合MyISAM;
    b.微博在更新微博和删除微博,要少的多,较为适合MyISAM;
    c.对数据完整性的需求并没有那么强烈,比如用户删除微博,关联的转播和评论并不要求都做相应的行为,较为适合MyISAM;
  2. 那么对于记账财务系统,选择哪一款存储引擎呢?
    a.财务系统除了读取和插入,经常要进行数据的修改和删除,较为适合InnoDB;
    b.在进行财务变更的时候,如果失败需要回滚必须用到事务,较为适合InnoDB;
    c.每个用户的财务数据完整性和同步性非常重要,需要外键支持,否则财务将会混乱,较为适合InnoDB。
原创文章 25 获赞 0 访问量 1821

猜你喜欢

转载自blog.csdn.net/ttf0203/article/details/103922538