日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

🍖存储引擎介绍

發布時間:2023/12/13 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 🍖存储引擎介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.存儲引擎介紹

1.什么是存儲引擎(比喻成表類型)

在講存儲引擎之前我們來做個比喻 : 現實生活中我們我們存儲的數據文件有不同的類型, 每種文件類型對應各自不同的處理機制

比如一個視屏文件,可以轉換成mp4、avi、wmv, 一個圖片可以是png、jpg

我們電腦的磁盤上也會存在不同類型的文件系統, Windows里常見的ntfs、fat32Linux里常見的ext3、ext4、xfs

數據庫中的表也應該有不同的類型, 表的類型不同, 會對應mysql不同的存取機制, 表類型又稱為存儲引擎

2.為什么有多種存儲引擎

如同上面的比喻, 雖然一個視頻文件的類型不一樣, 但是呈現的內容都是一樣的

表數據也是這樣, 一張表的數據無論使用什么存儲引擎, 用戶能看到的數據是一樣的, 不同的儲引擎存取, 引擎功能, 占用空間大小, 讀取性能等可能有區別

說白了, 存儲引擎就是在如何存儲數據、提取數據、更新數據等技術方法的實現上, 底層的實現方式不同, 那么就會呈現出不同存儲引擎有著一些自己獨有的特點和功能, 對應著不同的存取機制

于是乎, 用戶在使用的時候根據自己不同的業務場景選擇不同的存儲引擎, 其中MySQL最常用的存儲引擎為:MyISAMInnoDB (下面詳細介紹)

ps : 在Oracle 和SQL Server等數據庫中只有一種存儲引擎,所有數據存儲管理機制都是一樣的

3.MySQL的工作流程

二.Mysql四種主要的存儲引擎

1.InnoDB

Mysql 5.5 版本及之后的默認存儲引擎
優點 : 支持事務, 行級鎖定和外鍵約束對數據的安全性較高
特點 : 行鎖設計、支持外鍵,并支持類似 Oracle 的非鎖定讀,即默認讀取操作不會產生鎖
缺點 : 相對于MyISAM速度較低, 但安全性較高
存儲結構 : 每個InnoDB(索引引擎, 自帶索引)在磁盤上存儲成2個文件,其中文件名和表名都相同

t01.frm  # 存放的是表結構
t01.idb  # 存放的是 索引 + 數據

2.MyISAM

Mysql 5.5 版本之前的默認存儲引擎
優點 : 訪問速度相對Innodb更快
缺點 : 不支持事務, 也不支持外鍵, 對事務完整性沒有要求, 數據的安全性沒有Innodb
存儲結構 : 每個MyISAM在磁盤上存儲成3個文件, 其中文件名和表名都相同

t01.frm  # 表結構
t01.MYD  # MyDaata 存放的是數據
t01.MYI  # MyIndex 存放的是索引

3.Memory

優點 : 采用內存存儲, 數據的讀取非常快
缺點 : 數據庫重啟或發生崩潰,表中的數據都將消失
存儲結構 : 每個Memory在磁盤上存儲成1個文件,其中文件名和表名都相同

t01.frm  # 表結構

4.Blackhole

特點 : 黑洞, 無論存什么都會消失, 類似Linux中的 dev/null
應用 : 可以應用于主備復制中的分發主庫

三.MyISAM與InnoDB的區別

1.存儲結構不同

每個MyISAM在磁盤上存儲成三個文件
每個InnoDB在磁盤上存儲成2個文件

2.存儲空間

MyISAM可被壓縮, 存儲空間較小
InnoDB需要更多的內存和存儲, 它會在主內存中建立其專用的緩沖池用于高速緩沖數據和索引

3.事物支持

MyISAM強調的是性能, 每次查詢具有原子性, 其執行速度比Innodb類型更快, 但是不提供事物支持
InnoDB提供事務支持, 外部鍵等高級數據庫功能, 具有事務(commit)、回滾(rollback)和崩潰修復能力(crach recovery capabilities)的事務安全(transaction-safe ACID compliant)型表

4.外鍵

InnoDB支持外鍵, MyISAM不支持

5.增刪改查操作

如果執行大量的select, MyISAM是更好的選擇(因為沒有支持行級鎖), 在增刪的時候需要鎖定整個表格, 效率會低一些, 而innoDB支持行級鎖, 刪除插入的時候只需要鎖定該行就行,效率較高;
如果你的數據執行大量的insertupdate, 出于性能方面的考慮, 應該使用InnoDB表, Delete從性能上Innodb更優
delete from table時,InnoDB不會重新建立表,而是一行一行的刪除,在innodb上如果要清空保存有大量數據的表,最好使用truncate table這個命令

6.應用

MyISAM適合查詢以及插入為主的應用
InnoDB適合頻繁修改以及涉及到安全性較高的應用

四.其他存儲引擎(了解)

5.NDB 存儲引擎

2003 年,MySQL AB 公司從 Sony Ericsson 公司收購了 NDB 存儲引擎。 NDB 存儲引擎是一個集群存儲引擎,類似于 Oracle 的 RAC 集群,不過與 Oracle RAC 的 share everything 結構不同的是,其結構是 share nothing 的集群架構,因此能提供更高級別的 高可用性。NDB 存儲引擎的特點是數據全部放在內存中(從 5.1 版本開始,可以將非索引數 據放在磁盤上),因此主鍵查找(primary key lookups)的速度極快,并且能夠在線添加 NDB 數據存儲節點(data node)以便線性地提高數據庫性能。由此可見,NDB 存儲引擎是高可用、 高性能、高可擴展性的數據庫集群系統,其面向的也是 OLTP 的數據庫應用類型。

6.Infobright 存儲引擎

第三方的存儲引擎。其特點是存儲是按照列而非行的,因此非常 適合 OLAP 的數據庫應用。其官方網站是 http://www.infobright.org/,上面有不少成功的數據 倉庫案例可供分析。

7.NTSE 存儲引擎

網易公司開發的面向其內部使用的存儲引擎。目前的版本不支持事務, 但提供壓縮、行級緩存等特性,不久的將來會實現面向內存的事務支持。

ps : Mysql 支持的存儲引擎非常多, 上面只是常見存儲引擎, 還支持自定義, 也就是自己寫一個

五.不同存儲引擎的使用對比

1.查看存儲引擎

show engines;  # 查看安裝的mysql所有支持的存儲引擎
show variables like 'storage_engine%';  # 查看當前正在使用的存儲引擎

2.創建不同的表并指定不同的存儲引擎

create table innodb_t01(id int) engine=innodb;        # 末尾指定InnoDB存儲引擎
create table myisam_t02(id int) engine=myisam;        # 指定MyISAM存儲引擎
create table memory_t03(id int) engine=memory;        # 指定memory存儲引擎
create table blackhole_t04(id int) engine=blackhole;  # 指定Blackhole存儲引擎

3.分別向四個表中插入數據

insert into innodb_t01 values(1),(2);   # 插入 ID 1 和 2 ,下同
insert into myisam_t02 values(1),(2);
insert into memory_t03 values(1),(2);
insert into blackhole_t04 values(1),(2);

4.查看四張表的內容變化

select * from innodb_t01;
select * from myisam_t02;
select * from memory_t03;
select * from blackhole_t04;  # 注意 : 黑洞

結論 : 對于blackhole類型的表, 往表內插入任何數據, 都相當于丟入黑洞, 表內永遠不存記錄

5.重啟Mysqld查看memory表的變化

重啟 mysql

再次查看 memory_t03

結論 : 對于memory類型的表,在重啟mysql或者重啟機器后,表內數據清空

六. 表的詳細操作

下一篇將詳細介紹表的操作

總結

以上是生活随笔為你收集整理的🍖存储引擎介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。