Mysql存儲(chǔ)引擎詳解
存儲(chǔ)引擎的介紹
關(guān)系型數(shù)據(jù)庫(kù)表是用來(lái)存儲(chǔ)和組織信息的數(shù)據(jù)結(jié)構(gòu),可以將表理解為由行和列組成的表格。
由于表的類(lèi)型不同,我們?cè)趯?shí)際開(kāi)發(fā)過(guò)程中,就有可能需要各種各樣的表,不同的表就意味著存儲(chǔ)不同類(lèi)型的數(shù)據(jù),數(shù)據(jù)的處理上也會(huì)存在差異
對(duì)于Mysql來(lái)說(shuō),它提供了很多種類(lèi)型的存儲(chǔ)引擎
存儲(chǔ)引擎說(shuō)白了就是如何存儲(chǔ)數(shù)據(jù),如何為存儲(chǔ)的數(shù)據(jù)建立索引和如何更新、查詢(xún)數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方法。
因?yàn)樵陉P(guān)系型數(shù)據(jù)庫(kù)中數(shù)據(jù)的存儲(chǔ)是以表的形式存儲(chǔ) 的,所以存儲(chǔ)引擎也可以稱(chēng)為表類(lèi)型(即存儲(chǔ)和操作此表的類(lèi)型)
Mysql中的存儲(chǔ)引擎
MyISAM
這種引擎是mysql最早提供的,這種引擎又可以分為靜態(tài)MyISAM、動(dòng)態(tài)MyISAM和壓縮MyISAM三種
靜態(tài)MyISAM:
如果數(shù)據(jù)表中的各數(shù)據(jù)列的長(zhǎng)度都是預(yù)先固定好的,服務(wù)器將自動(dòng)選擇這種表類(lèi)型。
因?yàn)閿?shù)據(jù)表中的每一條記錄所占用的空間都是一樣的,所以這種表存取和更新的效率非常高。
當(dāng)數(shù)據(jù)受損時(shí),恢復(fù)工作也比較容易做
動(dòng)態(tài)MyISAM:
如果數(shù)據(jù)表中出現(xiàn)varchar,xxxtext或xxxxBLOB字段時(shí),服務(wù)器將自動(dòng)選擇這種表類(lèi)型 。
相對(duì)于靜態(tài)MyISAM,這種表存儲(chǔ)空間比較小,但由于每條記錄的長(zhǎng)度不一,所以多次修改數(shù)據(jù)后,數(shù)據(jù)表中的數(shù)據(jù)就可能離散的存儲(chǔ)在內(nèi)存中,進(jìn)而導(dǎo)致執(zhí)行效率下降.
同時(shí)內(nèi)存中也可能會(huì)出現(xiàn)很多碎片。
因此這種類(lèi)型的表要經(jīng)常 用optimize table命令 或優(yōu)化工具來(lái)進(jìn)行碎片整理
壓縮MyISAM:
以上說(shuō)的兩種類(lèi)型的表都可以用myisamchk工具壓縮。
這種類(lèi)型的表進(jìn)一步減少了占用的存儲(chǔ)。
但是這種表壓縮之后不能再被修改。
另外,因?yàn)槭菈嚎s數(shù)據(jù),所以這種表在讀取的時(shí)候要先執(zhí)行解壓縮
但是,不管是哪種MyISAM表,目前都不支持事務(wù),行級(jí)鎖和外鍵約束的功能
MyISAM表示獨(dú)立于操作系統(tǒng)的,這說(shuō)明可以輕松的將其從windows服務(wù)器轉(zhuǎn)移 到linux服務(wù)器;
每當(dāng)我們建立一個(gè)MyISAM引擎的表時(shí),就會(huì)在本地磁盤(pán)上建立三個(gè)文件,文件名就是表名。
例如:我建立一個(gè)MyISAM引擎的th_Demo表,那么就會(huì)生成以下三個(gè)文件:
1.th_demo.frm:存儲(chǔ)表定義;
2.th_demo.MYD:存儲(chǔ)數(shù)據(jù);
3.th_demo.MYI:存儲(chǔ)索引;
MyISAM存儲(chǔ)引擎特別適合在以下幾種情況下使用:
1.選擇密集型的表,MYISAM存儲(chǔ)引擎在篩選大量數(shù)據(jù)時(shí)非常迅速,這是它最突出的優(yōu)點(diǎn)
2.插入密集型的表,MYISAM的并發(fā)插入特性允許同時(shí)選擇和插入數(shù)據(jù)。例如:MYISAM存儲(chǔ)引擎很適合管理郵件或web服務(wù)器日志數(shù)據(jù)
InnoDB
InnoDB表類(lèi)型可以看作是對(duì)MyISAM的進(jìn)一步更新產(chǎn)品,它提供了事務(wù)、行級(jí)鎖機(jī)制和外鍵約束的功能
InnoDB是一個(gè)健壯的事務(wù)型存儲(chǔ)引擎
使用場(chǎng)景:
1.更新密集的表。InnoDB存儲(chǔ)引擎特別適合處理多重并發(fā)的更新請(qǐng)求
2.事務(wù).InnoDB存儲(chǔ)引擎是支持事務(wù)的標(biāo)準(zhǔn)mysql存儲(chǔ)引擎
3.自動(dòng)災(zāi)難恢復(fù)。與其他存儲(chǔ)引擎不同,InnoDB表能夠自動(dòng)從災(zāi)難中恢復(fù)
4.外鍵約束。mysql支持外鍵的存儲(chǔ)引擎只有InnoDB
5.支持自動(dòng)增加列AUTO_INCREMENT屬性
一般來(lái)說(shuō),如果需要事務(wù)支持,并且有較高的并發(fā)讀取頻率,InnoDB是不錯(cuò)的選擇
memory(heap)
使用Mysql Memory存儲(chǔ)引擎的出發(fā)點(diǎn)是速度,為了得到最快的響應(yīng)時(shí)間
采用的邏輯存儲(chǔ)介質(zhì)是系統(tǒng)內(nèi)存。
它要求存儲(chǔ)在Memory數(shù)據(jù)表里的數(shù)據(jù)使用的是長(zhǎng)度不變的格式,這意味著不能使用BLOB和Text這樣的長(zhǎng)度可變的數(shù)據(jù)類(lèi)型
VARCHAR是一種長(zhǎng)度可變的類(lèi)型,但因?yàn)樗贛ysql內(nèi)部當(dāng)作長(zhǎng)度固定不變的CHAR類(lèi)型,所以可以使用
Memory同時(shí)支持散列索引和B樹(shù)索引。B樹(shù)索引優(yōu)于散列索引的是:
可以使用部分查詢(xún)和通配查詢(xún),也可以使用<,>和>=等操作符方便數(shù)據(jù)挖掘
散列索引進(jìn)行“相等比較”非??欤菍?duì)"范圍比較"的速度就慢多了
散列索引值適合使用在=和<>的操作符,不適合<或>操作符中,也同樣不適合在order by子句中
一般在以下幾種情況下使用Memory存儲(chǔ)引擎:
1.目標(biāo)數(shù)據(jù)較小,而且被非常頻繁地訪(fǎng)問(wèn)。
在內(nèi)存中存放數(shù)據(jù),所以會(huì)造成內(nèi)存的使用,可以通過(guò)參數(shù)max_heap_table_size控制memory表的大小,設(shè)置此參數(shù),就可以限制Memory表的最大大小了。
2.如果數(shù)據(jù)是臨時(shí)的,而且要求必須立即可用,那么就可以存放在內(nèi)存表中
3.存儲(chǔ)在Memory表中的數(shù)據(jù)如果突然丟失,不會(huì)對(duì)應(yīng)用服務(wù)器產(chǎn)生實(shí)質(zhì)的負(fù)面影響
archive
archive是歸檔的意思,在歸檔之后很多的高級(jí)功能就不再支持了,僅僅支持最基本的插入和查詢(xún)兩種功能。
mysql5.5版本以前,Archive是不支持索引,但是在Mysql以后的版本中就開(kāi)始支持索引了。
Archive擁有很好的壓縮機(jī)制,它使用zlib壓縮庫(kù),在記錄被請(qǐng)求時(shí)會(huì)實(shí)時(shí)壓縮,所以它經(jīng)常被用來(lái)當(dāng)作倉(cāng)庫(kù)使用
常用于日志記錄和聚合分析方面
MERGE
MERGE存儲(chǔ)引擎是一組MyISAM表的組合,這些MYISAM表結(jié)構(gòu)必須完全相同,盡管其使用不如其他引擎突出,但是在某些情況下非常有用
Merge表就是幾個(gè)相同MyISAM表的聚合器
Merge表中并沒(méi)有數(shù)據(jù),對(duì)Merge類(lèi)型的表可以進(jìn)行查詢(xún)、更新、刪除操作
這些操作實(shí)際上是對(duì)內(nèi)部的MyISAM表進(jìn)行操作
Merge存儲(chǔ)引擎的使用場(chǎng)景:
對(duì)于服務(wù)器日志這種信息,一般常用的存儲(chǔ)策略是將數(shù)據(jù)分成很多表,每個(gè)名稱(chēng)與特定的時(shí)間端相關(guān)
刪除Merge表只是刪除Merge表的定義,對(duì)內(nèi)部的表沒(méi)有任何影響
Mysql中關(guān)于存儲(chǔ)引擎的操作
1.查看數(shù)據(jù)庫(kù)可以支持的存儲(chǔ)引擎
show engines;
2.查看表的結(jié)構(gòu)等信息的若干命令
desc tablename:查看數(shù)據(jù)表的結(jié)構(gòu)
show create table tablename:顯示表的創(chuàng)建語(yǔ)句
show table status like 'tablename'\G:顯示表的當(dāng)前狀態(tài)值
3.設(shè)置或修改表的存儲(chǔ)引擎
create table tablename(
columnname(列名1) type(數(shù)據(jù)類(lèi)型) attri(屬性設(shè)置),
columnname(列名1) type(數(shù)據(jù)類(lèi)型) attri(屬性設(shè)置),
)engine= enginename:創(chuàng)建數(shù)據(jù)庫(kù)表時(shí)設(shè)置存儲(chǔ)存儲(chǔ)引擎
Alter table tablename engine = engineName:修改存儲(chǔ)引擎
以上就是本文關(guān)于MySQL存儲(chǔ)引擎的全部?jī)?nèi)容了,希望對(duì)大家學(xué)習(xí)MySQL能夠有所幫助
- MySQL修改默認(rèn)存儲(chǔ)引擎的實(shí)現(xiàn)方法
- Mysql更換MyISAM存儲(chǔ)引擎為Innodb的操作記錄總結(jié)
- MySQL存儲(chǔ)引擎中MyISAM和InnoDB區(qū)別詳解
- mysql存儲(chǔ)引擎和數(shù)據(jù)類(lèi)型(二)
- Mysql存儲(chǔ)引擎MyISAM的常見(jiàn)問(wèn)題(表?yè)p壞、無(wú)法訪(fǎng)問(wèn)、磁盤(pán)空間不足)
- MySQLMerge存儲(chǔ)引擎
- MySQL中InnoDB存儲(chǔ)引擎的鎖的基本使用教程
- MySQL存儲(chǔ)引擎基礎(chǔ)知識(shí)
相關(guān)文章
Mysql實(shí)現(xiàn)遞歸樹(shù)查詢(xún)的使用示例
Mysql我們可以使用遞歸查詢(xún)來(lái)構(gòu)建一個(gè)遞歸樹(shù),本文就來(lái)介紹一下Mysql實(shí)現(xiàn)遞歸樹(shù)查詢(xún)的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10MySQL動(dòng)態(tài)列轉(zhuǎn)行的實(shí)現(xiàn)示例
本文介紹了如何在MySQL中實(shí)現(xiàn)動(dòng)態(tài)列轉(zhuǎn)行的功能,通過(guò)使用格式化日期、計(jì)數(shù)函數(shù)、分組、存儲(chǔ)過(guò)程、分組合并函數(shù)和SQL拼接等技巧,可以將動(dòng)態(tài)列轉(zhuǎn)換為行,從而更好地進(jìn)行數(shù)據(jù)分析和展示,感興趣的可以了解一下2024-11-11Mysql聯(lián)合索引的原理與實(shí)現(xiàn)
聯(lián)合索引是一種將多個(gè)列組合成一個(gè)索引的技術(shù),以提高基于這些列進(jìn)行查詢(xún)的性能,本文主要介紹了Mysql聯(lián)合索引的原理與實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08MySQL中my.ini文件的基礎(chǔ)配置和優(yōu)化配置方式
文章討論了數(shù)據(jù)庫(kù)異步同步的優(yōu)化思路,包括三個(gè)主要方面:冪等性、時(shí)序和延遲,作者還分享了MySQL配置文件的優(yōu)化經(jīng)驗(yàn),并鼓勵(lì)讀者提供支持2025-01-01MySQL中union和join語(yǔ)句使用區(qū)別的辨析教程
這篇文章主要介紹了MySQL中union和join語(yǔ)句的用法區(qū)別,舉例說(shuō)明了union和join在連接操作上的不同作用,需要的朋友可以參考下2015-12-12MySQL從一個(gè)表中查出數(shù)據(jù)并插入到另一個(gè)表的詳細(xì)處理方案
這篇文章主要給大家介紹了關(guān)于MySQL從一個(gè)表中查出數(shù)據(jù)并插入到另一個(gè)表的詳細(xì)處理方案,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-12-12MySQL MHA 運(yùn)行狀態(tài)監(jiān)控介紹
這篇文章主要介紹MySQL MHA 運(yùn)行狀態(tài)監(jiān)控,MHA(Master HA)是一款開(kāi)源的 MySQL 的高可用程序,它為 MySQL 主從復(fù)制架構(gòu)提供了 automating master failover 功能,想具體了解的小伙伴可以和小編一起學(xué)習(xí)下面文章內(nèi)容2021-10-10Mysql賬戶(hù)管理原理與實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Mysql賬戶(hù)管理原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了mysql賬戶(hù)管理的原理、操作技巧、相關(guān)問(wèn)題解決方法與注意事項(xiàng),需要的朋友可以參考下2020-01-01MySQL數(shù)據(jù)庫(kù)事務(wù)transaction示例講解教程
這篇文章主要為大家介紹了MySQL數(shù)據(jù)庫(kù)事務(wù)transaction的示例講解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10