你们好,我是jacky,很高兴继续跟你们分享《MySQL数据分析实战》,今天跟你们分享的主题是表补充之存储引擎;mysql
咱们以前学了跟表结构相关的一些操做,那咱们看一下建立表的SQL模型:web
在咱们建立表里,咱们还有ENGINE=存储引擎,没有说,咱们如今MySQL的默认引擎是InnoDB,那其实在5.5版本以前,默认的存储引擎是MyISAM,而5.5以后呢才使用的是InnoDB,本节课程jacky将讲解跟存储引擎有关的一些内容;面试
对于不少零基础的朋友来讲,听到存储引擎这个词,是否是以为很晦涩,很理论,其实它一点不晦涩,也一点不理论,存储引擎是整个MySQL的核心,虽然做为核心,但不少资料没有把存储引擎讲透,由于面对初学的朋友来讲,能用上MySQL存储引擎的,不过就是一条SQL语句;好比说:ENGINE=InnoDB,而且这是在建立库或者是建立表的时候才能用上它,如何你不写它,系统也会默认给你一个生成,对于一些作数据分析或是产品经理等朋友来讲,须要的数据我能从数据库里查询调用就行,没有必要把原理搞的这么清楚,因此才会有些朋友,使用了几年的MySQL,如今仍是搞不清存储引擎是什么,因此有些人工资和能力老是停滞不前也是这个缘由,业务须要精进,对于我的的职业发展是必要的条件,当你抱怨你的现实跟理想差距怎么这么大的时候,咱们有没有想过,咱们的才华跟咱们的梦想是否是相匹配,咱们是否是要提高咱们的才华和能力,那当咱们遇到提高能力的瓶颈时应该如何突破了,就是对咱们的技能要知其然,更要之因此然;算法
jacky说了这么多,就是告诉你们,存储引擎很重要,SQL语句很简单,可是这句SQL语句背后的意义,咱们更要重视和理解,好,开篇说完,咱们正式开始讲存储引擎,第一部分,仍是跟以往的分享同样,给你们梳理一下本课时的逻辑线;sql
jacky再给你们总结一下,本课时的逻辑线就是,记一下笔记:数据库
1.存储引擎是什么,MySQL的发明者把它发明出来的背景是什么;缓存
2.存储引擎的应用场景是什么,它能帮助咱们解决企业中的什么实际问题;安全
3.咱们怎样用MySQL这个存储引擎;架构
这个学习逻辑线,特别的清晰,就是是什么,为何,怎么样,这些都清楚了,存储引发也就清楚了;并发
开过汽车或了解汽车的朋友都知道,手动挡汽车里有一个离合器的东西,你们也都知道只有左脚踩上离合器,汽车才能挂上挡,加油后汽车才能启动;可是,问你们为何踩上离合器汽车才能启动,大部分人是回答不上来的,同理,一些朋友对于MySQL中的存储引擎也是这样的,存储引擎是什么,都有一些模糊的理解,关于存储引擎是怎样在MySQL中起做用的大部分人也是说不清的;
好,那接下来就是,咱们为何必定要掌握存储引擎的原理,你们思考,汽车的离合器坏了,有修车长和4S店给你修,你的存储引擎在MySQL配置中出了错,你找谁去修,让别的同事去修,这大可能是行不一样的,因此,咱们要知道存储引擎到底在MySQL中是如何起做用的?
咱们该怎么学才能搞清楚存储引擎呢?仍是借用离合器那个类比,咱们要搞懂离合器在汽车中是如何起做用的,是否是要先搞懂汽车的结构,进而才能知道离合器在整个汽车结构中处于什么样的做用;
同理道理,要搞清楚存储引擎,咱们也要先搞懂MySQL的架构体系,或者说是MySQL的物理组件,咱们才能深入的理解存储引擎,好,这个逻辑咱们捋顺了,咱们就按照这个逻辑来学习吧
先来看下,MySQL的构架体系图:
这张图能够告诉咱们MySQL具体是怎么执行的,咱们看下MySQL是由哪几部分组成的,从结构表里看有SQL接口、解析器、优化器、缓存、存储引擎,等等这么多,是否是,下面jacky分别来讲一些每部分分别是什么:
Connectors:不一样语言中与SQL的交互接口;
Management Serivices & Utillities:系统管理和控制工具
Connection Pool:链接池
SQL Interface:接收用户的SQL指令,而且返回须要查询的结果
Parser:解析器
Optimizer:查询优化器
咱们的SQL语句在查询以前,就会使用到这个查询优化器,来对咱们的查询进行优化,查询优化器使用的策略是(简单了解下):
1)选取 ➡️2)投影➡️3)链接
Caches & Buffers:查询缓存
Engine:存储引擎
File system /File & Logs:文件和日志的存储,这个就没什么说的了 ;
接着上次的分享,jacky跟你们说了存储引擎的第一个逻辑线,存储引擎是什么?对于MYSQL的构架体系,jacky在此次分享的开头再作一下补充说明,就是jacky讲这个MySQL的构架体系,是为了让你们理解存储引擎在MySQL中的做用,是这个目的,对于其余的MYSQL构架你们有个印象,了解就好,没必要过于纠结,固然知道的越多,对存储引擎的理解就越深,固然,单单只是了解,也不耽误咱们接下来的学习;
好,咱们回归主题, 按照咱们的逻辑线,咱们讲完第一部分存储引擎是什么,
接下来我应该讲存储引擎的应用场景是吧,讲它是怎样帮助咱们解决问题的,最后讲咱们应该怎样用存储引擎,也就是在MySQL应该怎样建立这个存储引擎,是吧,按照这个逻辑讲是否是就会很清楚了;咱们先记下笔记,把这个逻辑框架先记下来:
笔记:(二)存储引擎的应用场景
笔记:(三)存储引擎怎样用;
好,关于第二部分,涉及的内容比较多,jacky先讲第三个逻辑线就是存储引擎怎么用,换句话说,就是在MySQL里,咱们建立表的时候,应该如何建立咱们的存储引擎;
CREATE TABLE 表名( 字段名1 数据类型 [属性] 索引, 字段名1 数据类型 [属性] 索引, … … )ENGINE=存储引擎 CHARSET=字符集;
咱们知道存储引擎怎么用了,ENGINE=要替换的存储引擎,咱们还用知道为何要这样用,咱们何时用ENGINE=InnoDB,何时用ENGINE=MyISAM,都是咱们这部分要探讨的问题;
咱们要想知道各类不用类型存储引擎的应用场景,首先要知道MySQL中有多少种类型的存储引擎是吧,咱们打开MySQL软件看一下:
SHOW ENGINES\G
show engines以后,jacky给你们讲解下相关的选项信息
ENGINE:存储引擎名称
SUPPORT:是否支持此存储引擎
COMMENT:存储引擎的注释
TRANSACTIONS:是否支持事务
XA:是否支持分布式交易处理的XA规范
SAVEPOINTS:是否支持保存点,以便事务回滚到保存点
好,这时初学的朋友会说,哎,jacky你说的太理论了,什么是事务,什么是XA规范,什么又是事务回滚呢?
你们这里只要先理解一个概念就行了,就是什么是事务,关于其余的一些理论名词,咱们听过就行,先不用管它,可是事务必定要明白什么意思,在面试和实际工做中这个词都是十分重要的;
上面是这些选项的一个意义,能够经过show engines查看全部存储引擎,当咱们建库的时候,或者建表的时候,当咱们没有指定存储引擎,咱们使用的就是默认的存储引擎,在MySQL的版本在5.5以前默认的都是MyISAM,而5.5以后呢才使用的是InnoDB;咱们能够经过下面这个SQL语句查看当前的默认存储引擎,语句是:
SHOW VARIABLES LIKE 'storage_engine';
咱们学习每一个存储引擎,都要学习这些存储引擎的特色,正是由于咱们知道了这些存储引擎的特色,才能选择合适的存储引擎;由于存储引擎对于咱们数据的存储包括索引,起着关键性的做用;
(1)默认MyISAM 的表会在存盘中产生3个文件:
.frm:表结构文件
.MYD:数据文件
.MYI:索引文件
(2)能够在建表的时候指定数据文件和索引文件的存储位置,只有MyISAM表支持,其余的存储引擎若是写上也是没有效果的:
DATA DIRECORY [=] 数据保存的绝对路径
INDEX DIRECORY [=] 索引文件保存的绝对路径
(3)MyISAM单表最大支持的数据量:2的64次方条记录,每一个表最多能够创建64个索引
并非说MyISAM支持的少,有不少No就说明它不行,MyISAM在5.5以前做为MySQL默认的存储引擎已经有10年了,包括如今咱们系统中的表的存储引擎仍是MyISAM,只不过它不是默认的存储引擎了,咱们看一下
show databases;
use information_schema;
show tables;
show create table views;
优势
缺点
(1)锁粒度太粗
(2)不支持事务
(1)定长(静态)FIXED
(2)动态 DYNAMIC
(3)压缩 COMPRESSED
定长和动态不须要咱们特殊指定,它会在咱们建立表的时候,根据咱们的字段类型,自动的去适配,假如咱们都是CHAR类型的,它就是咱们的静态表,若是说有VARCHAR,TEXT,当咱们建立表时,就是动态表;
像咱们压缩的存储格式,咱们必须经过一个工具myisampack来建立,这个后面jacky讲工具时会说,这里就再也不提了;
在5.5以后,InnoDB是咱们默认的存储引擎,也能够说是最重要的,也是最经常使用的存储引擎;InnoDB是业界公认的高性能,高可用性并且是使用频率最普遍的存储引擎,已经具备不可撼动的地位,相比于其余的存储引擎,它具备哪些特性呢?
特性一:设计遵循ACID模型,支持事务,具备从服务崩溃中恢复的能力,可以最大限度的包括咱们用户的数据
ACID模型其实就是咱们事务的四个特性:
原子性(Atomiocity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
特性二:支持行级锁,能够提高多用户并发时的读写性能;
特性三:支持外键,保存了数据的一致性和完整性;
特性四:InnoDB拥有本身独立的缓冲池,经常使用的数据和索引都在缓存中;
特性五:对于INSERT、UPDATE、DELETE操做,InnoDB会使用一种change buffering机制来自动优化,还能够提供一致性的读,而且还可以缓存变动的数据,减小磁盘I/O,提升性能
建立InnoDB表后会产生两个文件
.frm 表结构文件
.ibd 数据和索引存储表空间中
全部的表都须要建立主键,最好配合自增的属性,也能够放到常常查询的列,做为主键
咱们能够根据应用的须要,选择如何存储,MySQL默认支持多种存储引擎,以适用不一样领域的数据库的须要,咱们能够经过选择适用不用的存储引擎,提升应用的效率,提供灵活的存储,以达到最大程度可指定性,