欧美激情中文字幕在线_国产区精品视频_免费久久99精品国产自_日韩精品 欧美

MySQL多種索引引擎詳解

與其他數據庫例如Oracle 和SQL Server等數據庫中只有一種存儲引擎不同的是,MySQL有一個被稱為“Pluggable Storage Engine Architecture”(可替換存儲引擎架構)的特性,也就意味著MySQL數據庫提供了多種存儲引擎。用戶可以根據不同的需求為數據表選擇不同的存儲引擎,用戶也可以根據自己的需要編寫自己的存儲引擎。MySQL數據庫在實際的工作中其實分為了語句分析層和存儲引擎層,其中語句分析層就主要負責與客戶端完成連接并且事先分析出SQL語句的內容和功能,而存儲引擎層則主要負責接收來自語句分析層的分析結果,完成相應的數據輸入輸出和文件操作。簡而言之,就是如何存儲數據、如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現方法。因為在關系數據庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)。

存儲引擎種類

存儲引擎 說明
MyISAM 高速引擎,擁有較高的插入,查詢速度,但不支持事務
InnoDB 5.5版本后MySQL的默認數據庫,支持事務和行級鎖定,比MyISAM處理速度稍慢
ISAM MyISAM的前身,MySQL5.0以后不再默認安裝
MRG_MyISAM(MERGE) 將多個表聯合成一個表使用,在超大規模數據存儲時很有用
Memory 內存存儲引擎,擁有極高的插入,更新和查詢效率。但是會占用和數據量成正比的內存空間。只在內存上保存數據,意味著數據可能會丟失
Falcon 一種新的存儲引擎,支持事物處理,傳言可能是InnoDB的替代者
Archive 將數據壓縮后進行存儲,非常適合存儲大量的獨立的,作為歷史記錄的數據,但是只能進行插入和查詢操作
CSV CSV 存儲引擎是基于 CSV 格式文件存儲數據(應用于跨平臺的數據交換)

接下來我們就介紹兩種在實際開發中使用最多的兩種引擎【MyISAM】和【InnoDB】。

MyISAM 引擎

這種引擎是MySQL最早提供的。這種引擎又可以分為靜態MyISAM、動態MyISAM 和壓縮MyISAM三種:

靜態MyISAM:如果數據表中的各數據列的長度都是預先固定好的,服務器將自動選擇這種表類型。因為 數據表中每一條記錄所占用的空間都是一樣的,所以這種表存取和更新的效率非常高。當數據受損時,恢復工作也比較容易做。

動態MyISAM:如果數據表中出現varchar、xxxtext或xxxBLOB字段時,服務器將自動選擇這種表類型。相對于靜態MyISAM,這種表存儲空間比較小,但由于每條記錄的長度不一,所以多次修改數據后,數據表中的數據就可能離散的存儲在內存中,進而導致執行效率下降。同時,內存中也可能會出現很多碎片。因此,這種類型的表要經常用optimize table 命令或優化工具來進行碎片整理。

壓縮MyISAM:以上說到的兩種類型的表都可以用myisamchk工具壓縮。這種類型的表進一步減小了占用的存儲,但是這種表壓縮之后不能再被修改。另外,因為是壓縮數據,所以這種表在讀取的時候要先時行解壓縮。

當然不管是何種MyISAM表,目前它都不支持事務,行級鎖和外鍵約束的功能,這就意味著有事務處理需求的表,不能使用MyISAM存儲引擎。MyISAM存儲引擎特別適合在以下幾種情況下使用:

選擇密集型的表。MyISAM存儲引擎在篩選大量數據時非常迅速,這是它最突出的優點。

插入密集型的表。MyISAM的并發插入特性允許同時選擇和插入數據。

MyISAM表是獨立于操作系統的,這說明可以輕松地將其從Windows服務器移植到Linux服務器;每當我們建立一個MyISAM引擎的表時,就會在本地磁盤上建立三個文件,文件名就是表名。 例如我創建了一個【test】表,那么就會生成以下三個文件:

文件名 說明
test.frm 存儲表定義
test.MYD 存儲數據
test.MYI 存儲索引

InnoDB引擎

InnoDB表類型可以看作是對MyISAM的進一步更新產品,它提供了事務、行級鎖機制和外鍵約束的功能。InnoDB的表需要更多的內存和存儲,它會在主內存中建立其專用的緩沖池用于高速緩沖數據和索引。 使用InnoDB是最理想的選擇:

更新密集的表:InnoDB存儲引擎特別適合處理多重并發的更新請求

事務:InnoDB存儲引擎是支持事務的標準MySQL存儲引擎

自動災難恢復:與其它存儲引擎不同,InnoDB表能夠自動從災難中恢復

外鍵約束:MySQL支持外鍵的存儲引擎只有InnoDB

支持自動增加列AUTO_INCREMENT屬性

5. 總結
InnoDB:支持事務處理,支持外鍵,支持崩潰修復能力和并發控制。如果需要對事務的完整性要求比較高(比如銀行),要求實現并發控制(比如售票),那選擇InnoDB有很大的優勢。如果需要頻繁的更新、刪除操作的數據庫,也可以選擇InnoDB,因為支持事務的提交(commit)和回滾(rollback)。

MyISAM:插入數據快,空間和內存使用比較低。如果表主要是用于插入新記錄和讀出記錄,那么選擇MyISAM能實現處理高效率。如果應用的完整性、并發性要求比較低,也可以使用。

注意,同一個數據庫也可以使用多種存儲引擎的表。如果一個表要求比較高的事務處理,可以選擇InnoDB。這個數據庫中可以將查詢要求比較高的表選擇MyISAM存儲。如果該數據庫需要一個用于查詢的臨時表,可以選擇MEMORY存儲引擎。

上一篇 使用OpenSSL,創建本地調試HTTPS證書
下一篇 使用puppeteer實現瀏覽器自動化
目錄
applek

applek管理員

個人說明在個人中心里面設置

本月創作熱力圖

最新評論
小超
小超
7月9日
下個版本考慮將下載地址加密(防止采集)
Lvtu
Lvtu
7月4日
qiang厲害
評論于留言建議
chinacnd
chinacnd
6月26日
這個主題是怎么做到加載速度那么快的?
風起云涌
風起云涌
6月17日
前臺投稿現在有點太抽象了 希望可以弄成那種分區填寫的 標題,內容,圖片,目錄,標簽,這樣的
評論于留言建議
主站蜘蛛池模板: 久久riav二区三区| 91久久久久久| 国产一区香蕉久久| 日韩中文字幕在线免费观看| 激情网站五月天| 91av在线国产| 国产精品视频在线免费观看| 丝袜一区二区三区| 国产精品第1页| 久久久成人精品| 欧美日本精品在线| 日韩在线观看a| 91精品久久久久久久久久久| 国产精品视频自在线| 精品国产一区二区三区在线观看| 免费久久99精品国产自| 日韩av电影中文字幕| 午夜精品在线观看| 亚洲色欲久久久综合网东京热| 国产不卡一区二区在线播放| 国产日产亚洲精品| 国产午夜大地久久| 国内一区二区在线视频观看| 国产日韩欧美中文| 国产美女扒开尿口久久久| 欧美国产亚洲一区| 久久精品国产sm调教网站演员 | 久久精品99久久久久久久久| 欧美亚洲国产日韩2020| 欧美日韩一区在线视频| 欧美 日韩 国产在线观看| 久久久无码中文字幕久...| 久久国产乱子伦免费精品| 黄色片视频在线播放| 国产在线观看不卡| 国产传媒久久久| 91精品久久久久久久久久久久久| 国产成人综合精品| 亚洲专区在线视频| 日韩精品综合在线| 久久免费在线观看|