mysql--存储引擎

在关系型数据库中,MySQL在数据管理中具有独特的特性,即他可提供多种存储引擎,用来定义不同的信息持久化和检索特性

存储引擎的不同特性的主要包括:

1 事务性和非事务性
2 持久性和非持久性
3 表级和行级加锁
4 各种索引方法如btree,hash和rtree
5 聚簇索引,包括主键和非主键索引
6 数据压缩
7 全文搜索
这些都是在考虑选择存储引擎是要考虑的特性,我们可以通过showengines命令来查看数据库中可用的存储引擎相关信息

常见的存储引擎

在这里插入图片描述

这是常见的存储引擎及其特性比较,但是我们下面并不会全部都介绍,我们只介绍常用的MyISAM和Innodb两种存储引擎,在mysql5.5之前mysql的默认存储引擎都是MyISAM,在5.5之后就是Innodb了

MyISAM

主要特性:

1,非事务型
2,快速的数据插入速率
3,基于索引的Btree
4,支持全文索引
5,16K大小的数据页面
6,4K大小的索引页面

重要参数:

1 key_buffer_size:该缓冲区主要用于保存有关MyISAM索引的数据
2,table_cache:该缓存区保存执行查询时所打开表的信息
3,bulk_insert_buffer_size:该缓冲区用于改善带有大量VALUE的INSERT INSERT…SELECT LOAD DATA INFILE等语句
4,myisam_recover:定义了存储引擎的恢复模式

MyISAM存储

MyISAM表在文件系统中存储了三个独立的文件,他们位于mysql实例所制定的数据目录中,这些文件是:
1 table.frm:表格式定义文件
2 table.MYD:MyISAM数据文件,MYD就是MYSQL DATE
3 table.MYI:MyISAM数据库索引文件,MYI就是MYSQL INDEX

MyISAM行格式(没深入了解不做过多解释)

支持三种行格式:Fixed,Dynamic,Compressed

Innodb

主要特性

1 事务性
2 完全兼容ACID
3 支持MVCC(多版本并发控制)和4种事物的隔离级别
4 支持行级锁定
5支持外键约束
6 主键为聚簇索引

局限性

不支持全文索引;对于DDL语句(数据定义语句 create,alter,drop,truncate)进行的是表级锁定;相对于MyISAM来说会带来2-3倍的磁盘空间需求量

重要参数

1 Innodb_buffer_pool_size:定义内部数据存储分配的系统内存量
2 innodb_log_file_size:事务日志文件分配的磁盘容量
3 innodb_flush_log_at_trx_commit:定义innodb如何在磁盘刷新事务日志文件
4 innodb_thread_concurrency:定义innodb内核可以用来管理事务并发处理的内部线程的数量

Innodb存储

默认情况下,Innodb表在文件系统中表示为两个独立的文件
1 table.frm:表格式定义文件
2 ibdata1:所有表的默认Innodb表空间
两个事务日志文件
1 ib_logfile0
2 ib_logfile1
通过一些配置选项,能够改变InnoDB表空间以及日志文件的默认名称和储存位置信息

MyISAM与InnoDB的区别:

1:InnoDB支持事务,MyISAM不支持
2:My适合查询插入为主的操作,Innodb主要是适合频繁修改适合安全性较高的应用
3:Innodb支持外键,MyISAM不支持
4:Innodb不支持全文索引
5:InnoDB中不保存表的行数,如select count() from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含where条件时MyISAM也需要扫描整个表
6:对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引
7:清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表
8:InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like ‘%lee%’

9:InnoDB是聚簇索引,数据文件和索引是绑在一起的,必须要有主键,通过主键索引效率很高,但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据,因此主键不应该过大,因为主键太大,其他索引也会会很大。而MyISAM是非聚簇索引,数据和索引文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的

如何选择存储引擎

1 是否要支持事务,如果要选择InnoDB,如果不需要可以考虑MyISAM
2如果表中大部分都是只读查询,可以考虑MyISAM,如果会频繁读写,用InnoDB
3 系统崩溃后,MyISAM恢复起来更难
4MySQL5.5后InnoDB就是默认引擎了,没有特殊要求的话,就可以默认他

接下来我会继续写一下InnoDB下的一些东西,MVCC,隔离级别等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值