python--mysql存储引擎

认识存储引擎

  • 存储引擎的概念是MySQL里面才有的,不是所有的关系型数据库都有存储引擎这个概念
  • 比喻说明:录制一个视频文件,可以转换成不同的格式,例如mp4,avi,wmv等,而存在我们电脑的磁盘上也会存在于不同类型的文件系统中如windows里常见的ntfs、fat32,存在于linux里常见的ext3,ext4,xfs,但是,给我们或者用户看懂实际视频内容都是一样的。直观区别是,占用系统的空间大小与清晰程度可能不一样。
    那么数据库表里的数据存储在数据库里及磁盘上和上述的视频格式及存储磁盘文件的系统格式特征类似,也有很多种存储方式。
    但是对于用户和应用程序来说同样一张表的数据,无论用什么引擎来存储,用户能够看到的数据是一样的。不同储引擎存取,引擎功能,占用空间大小,读取性能等可能有区别。说白了,存储引擎就是在如何存储数据、提取数据、更新数据等技术方法的实现上,底层的实现方式不同,那么就会呈现出不同存储引擎有着一些自己独有的特点和功能,对应着不同的存取机制。
  • 因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即:对表的存储、操作等的实现方法不同),表是什么,表本质上就是磁盘上的文件。

看图了解存储引擎
在这里插入图片描述

MySQL存储引擎分类

  • MySQL表默认有一个存储引擎。
  • 在MySQL5.5之前,默认的存储引擎是MyISAM,之后都改为InnoDB了。
  • InnoDB是公司中最常用的、最好用的引擎,但是还是一些公司在用MyISAM引擎,除了历史原因之外。
  • MyISAM的效率比InnoDB高一点,InnoDB在这方面做了很多优化,效率已经和MyISAM差不多了
  • InnoDB引擎还有好多其他的NB的功能,是MyISAM不具备的

1、MyISAM引擎特点:


1.不支持事务
事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全成功要么全失败。

2.表级锁定
数据更新时锁定整个表:其锁定机制是表级锁定,也就是对表中的一个数据进行操作都会将这个表锁定,其他人不能操作这个表,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能。

3.读写互相阻塞
不仅会在写入的时候阻塞读取,MyISAM还会再读取的时候阻塞写入,但读本身并不会阻塞另外的读。

4.只会缓存索引
MyISAM可以通过key_buffer_size的值来提高缓存索引,以大大提高访问性能减少磁盘IO,但是这个缓存区只会缓存索引,而不会缓存数据。

5.读取速度较快
占用资源相对较少

6.不支持外键约束,但只是全文索引

7.MyISAM引擎是MySQL5.5版本之前的默认引擎,是对最初的ISAM引擎优化的产物。

2、InnoDB引擎
介绍:InnoDB引擎是MySQL数据库的另一个重要的存储引擎,正称为目前MySQL AB所发行新版的标准,被包含在所有二进制安装包里。和其他的存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务(类似于PostGreSQL),以及参数完整性(即对外键的支持)。Oracle公司与2005年10月收购了Innobase。Innobase采用双认证授权。它使用GNU发行,也允许其他想将InnoDB结合到商业软件的团体获得授权。

InnoDB引擎特点:

InnoDB引擎特点:
1.支持事务:支持4个事务隔离界别,支持多版本读。

2.行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响。

3.读写阻塞与事务隔离级别相关(有多个级别,这就不介绍啦~)。

4.具体非常高效的缓存特性:能缓存索引,也能缓存数据。

5.整个表和主键与Cluster方式存储,组成一颗平衡树。(了解)

6.所有SecondaryIndex都会保存主键信息。(了解)

7.支持分区,表空间,类似oracle数据库。

8.支持外键约束,不支持全文索引(5.5之前),以后的都支持了。

9.和MyISAM引擎比较,InnoDB对硬件资源要求还是比较高的。

    小结:三个重要功能:Supports transactions,row-level locking,and foreign keys

InnoDB引擎适用的生产业务场景

InnoDB引擎适用的生产业务场景
1.需要事务支持(具有较好的事务特性,例银行业务)

2.行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成。

3.数据更新较为频繁的场景,如:BBS(论坛)、SNS(社交平台)、微博等

4.数据一致性要求较高的业务,例如:充值转账,银行卡转账。

5.硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘IO,可以通过一些参数来设置,这个就不细讲啦~~~

6.相比MyISAM引擎,Innodb引擎更消耗资源,速度没有MyISAM引擎快

存储引擎的使用

1、创建表时指定引擎

create table innodb_t2(id int)engine=innodb;

2、在配置文件中指定默认的存储引擎

linux:vim /etc/my.cnf   windows:my.ini文件
[mysqld]
default-storage-engine=INNODB  #配置默认引擎,现在用的mysql默认基本都是InnoDB,所以其实都可以不用配置了
innodb_file_per_table=1  #表示独立表空间存储,可以不写

3、不同引擎在创建表的时候生成文件的不同
示例:创建四个表,分别使用innodb,myisam,memory,blackhole存储引擎,进行插入数据测试

#下面是使用四个不同的引擎来创建的表
create table t1(id int)engine=innodb;
create table t2(id int)engine=myisam;
create table t3(id int)engine=memory;
create table t4(id int)engine=blackhole;

在这里插入图片描述

关于data目录库目录内表文件的作用介绍

1.db.opt文件:用来记录该库的默认字符集编码和字符集排序规则用的。也就是说如果你创建数据库指定默认字符集和排序规则,那么后续创建的表如果没有指定字符集和排序规则,那么该新建的表将采用db.opt文件中指定的属性。

2.后缀名为.frm的文件:这个文件主要是用来描述数据表结构(id,name字段等)和字段长度等信息

3.后缀名为.ibd的文件:这个文件主要储存的是采用独立表储存模式时储存数据库的数据信息和索引信息;

4.后缀名为.MYD(MYData)的文件:从名字可以看出,这个是存储数据库数据信息的文件,主要是存储采用独立表储存模式时存储的数据信息;

5.后缀名为.MYI的文件:这个文件主要储存的是数据库的索引信息;

6.ibdata1文件:主要作用也是储存数据信息和索引信息,这个文件在mysql安装目录的data文件夹下。


总结:从上面可以看出,.ibd储存的是数据信息和索引信息,ibdata1文件也是存储数据信息和索引信息,.MYD和.MYI也是分别储存数据信息和索引信息,那他们之间有什么区别呢?
主要区别是再于数据库的存储引擎不一样,如果储存引擎采用的是MyISAM,则生成的数据文件为表名.frm、表名.MYD、表名的MYI;而储存引擎如果是innoDB,开启了innodb_file_per_table=1,也就是采用独立储存的模式,生成的文件是表名.frm、表名.ibd,如果采用共存储模式的,数据信息和索引信息都存储在ibdata1(在里面进行分类,从外面看是一个文件)中;
在进行数据恢复的时候,如果用的是MYISAM数据引擎,那么数据很好恢复,只要将相应.frm, .MYD, .MYI文件拷贝过去即可。但是如果是innodb的话,则每一个数据表都是一个单独的文件,只将相应的.frm和.ibd文件拷贝过去是不够的,必须在你的ibd文件的tablespace id和ibdata1文件中的元信息的tablespace id一致才可以。
msyql人家设定的规则就是这样存储表的,使用人家的系统,就要理解人家的规则。

查看存储引擎

执行:show engines;
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值