MySQL存儲引擎介紹
MySQL之存儲引擎html
本節目錄mysql
首先肯定一點,存儲引擎的概念是MySQL裏面纔有的,不是全部的關係型數據庫都有存儲引擎這個概念,後面咱們還會說,可是如今要肯定這一點。 linux
在講清楚什麼是存儲引擎以前,咱們先來個比喻,咱們都知道錄製一個視頻文件,能夠轉換成不一樣的格式,例如mp4,avi,wmv等,而存在咱們電腦的磁盤上也會存在於不一樣類型的文件系統中如windows裏常見的ntfs、fat32,存在於linux裏常見的ext3,ext4,xfs,可是,給咱們或者用戶看懂實際視頻內容都是同樣的。直觀區別是,佔用系統的空間大小與清晰程度可能不同。
那麼數據庫表裏的數據存儲在數據庫裏及磁盤上和上述的視頻格式及存儲磁盤文件的系統格式特徵相似,也有不少種存儲方式。
可是對於用戶和應用程序來講一樣一張表的數據,不管用什麼引擎來存儲,用戶可以看到的數據是同樣的。不一樣儲引擎存取,引擎功能,佔用空間大小,讀取性能等可能有區別。說白了,存儲引擎就是在如何存儲數據、提取數據、更新數據等技術方法的實現上,底層的實現方式不一樣,那麼就會呈現出不一樣存儲引擎有着一些本身獨有的特色和功能,對應着不一樣的存取機制。
由於在關係數據庫中數據的存儲是以表的形式存儲的,因此存儲引擎也能夠稱爲表類型(即:對錶的存儲、操做等的實現方法不一樣),表是什麼,表本質上就是磁盤上的文件。
其實MySQL支持多種存儲引擎,每種引擎有着一些本身獨特的功能,用戶在使用的時候,能夠根據本身的業務場景來使用不一樣的存儲引擎,其中MySQL最經常使用的存儲引擎爲:MyISAM和InnoDB。
在詳細介紹這些存儲引擎以前,咱們先來看看MySQL的整個工做流程,看一下存儲引擎在哪裏,MySQL都作了哪些事情。
看下圖:這是我在MySQL官方手冊上拿下來的(手冊你若是可以玩好,未來你就能作一個NB的DBA~~~)
sql
英文版的看着很難受啊超哥,好好好,給你來個中文的,看下圖:數據庫
來,看每一個部分的解釋,看下圖:vim
搞明白整個過程以後,咱們來細說一下這些存儲引擎,看下一節~~~windows
前面咱們對MySQL進行操做的時候並無指定存儲引擎,爲何還能用呢,沒有指定還能用,說明什麼,說明MySQL默認有一個存儲引擎,我記得MySQL5.5以前,默認的存儲引擎是MyISAM,以後都改成InnoDB了,咱們的重點就是這個InnoDB,也是公司中最經常使用的、最好用的引擎,可是仍是一些公司在用MyISAM引擎,除了歷史緣由以外,還有MyISAM的效率比InnoDB高一點,InnoDB在這方面作了不少優化,效率已經和MyISAM差很少了,可是InnoDB引擎還有好多其餘的NB的功能,下面咱們就介紹幾種存儲引擎。post
首先看一下我們的默認存儲引擎:性能
不一樣的引擎表明着不一樣的存取機制,那麼有哪些引擎呢,鏈接進入mysql以後,查看MySQL支持的全部存儲引擎:學習
一、show engines;#查看MySQL全部的引擎,
二、show variables like "storage_engine%";查看當前正在使用的引擎
注意:在存儲大文件的時候,能夠存到數據庫,可是儘可能別直接存到數據庫裏面,會影響數據庫的效率,咱們就存文件的路徑、地址,用戶想要這個大文件,咱們能夠到對應的路徑下取讀取這個文件給用戶。
幾種經常使用引擎介紹
1. MyISAM引擎
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
2. InnoDB引擎
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
總說事務,到底啥事事務?咱們看看解釋:
![](http://static.javashuo.com/static/loading.gif)
在介紹上面兩個引擎中涉及的兩個概念(OLTP和OLAP)的介紹
參考文章:https://blog.csdn.net/zhangzheng0413/article/details/8271322/
3.其餘引擎的介紹
![](http://static.javashuo.com/static/loading.gif)
一、建立表時指定引擎
create table innodb_t2(id int)engine=innodb;
二、在配置文件中指定默認的存儲引擎
linux:vim /etc/my.cnf windows:my.ini文件 [mysqld] default-storage-engine=INNODB #配置默認引擎,如今用的mysql默認基本都是InnoDB,因此其實均可以不用配置了 innodb_file_per_table=1 #表示獨立表空間存儲,能夠不寫
三、不一樣引擎在建立表的時候生成文件的不一樣
建立四個表,分別使用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;
經過四種引擎來建立的表,咱們對照着其生成的文件來看一下區別,看下圖:
關於上面的文件做用介紹:
![](http://static.javashuo.com/static/loading.gif)
在Oracle 和SQL Server等全部數據存儲管理機制都是同樣的。而MySql數據庫提供了多種存儲引擎。用戶能夠根據不一樣的需求爲數據表選擇不一樣的存儲引擎,用戶也能夠根據本身的須要編寫本身的存儲引擎。
Oracle中不存在引擎的概念,數據處理大體能夠分紅兩大類:聯機事務處理OLTP(on-line transaction processing)、聯機分析處理OLAP(On-Line Analytical Processing)。OLTP是傳統的關係型數據庫的主要應用,主要是基本的、平常的事務處理,例如銀行交易。OLAP是數據倉庫系統的主要應用,支持複雜的分析操做,側重決策支持,而且提供直觀易懂的查詢結果。
關於MySQL的存儲引擎大概就說這麼多吧~~~有興趣或者有基礎的同窗,能夠多去學一下MySQL官方手冊~~收穫會有不少~~~那麼咱們就繼續回到咱們的數據表操做去學習吧~~~