成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

有趣的 Mysql 存儲引擎

lidashuang / 1739人閱讀

摘要:提供了一套統(tǒng)一的應(yīng)用開發(fā)模型和核心,因此,盡管不同的存儲引擎擁有不同的特性,不過對于開發(fā)人員,應(yīng)用操作都是完全透明的。

Mysql 提供了一套統(tǒng)一的應(yīng)用開發(fā)模型和核心 API,因此,盡管不同的存儲引擎擁有不同的特性,不過對于開發(fā)人員,應(yīng)用操作都是完全透明的。應(yīng)用層的連接并不直接訪問存儲引擎層,而是訪問 Mysql 提供的 Api,也就是說不管所操作的表對象使用什么存儲引擎,讀寫數(shù)據(jù)時執(zhí)行的 DDL/DML 語句并沒有不同

下面介紹使用最廣泛的存儲引擎

memory 存儲引擎

內(nèi)存存儲引擎,直接把表保存到內(nèi)存中,在磁盤中只擁有一個 .frm 文件,用來存儲表結(jié)構(gòu)的定義

通過指定 engine=memory 設(shè)置

當(dāng) Mysql 服務(wù)關(guān)閉時,所有 memory 引擎表中的數(shù)據(jù)全部會丟失

分配給 memory 引擎表的內(nèi)存,正常情況不會釋放,而是有該表一直持有,即使刪除數(shù)據(jù),也不會被收回,只有當(dāng)整個表被刪除或者重建時才會回收相關(guān)內(nèi)存

memory 引擎表占用多少內(nèi)存空間?由兩個因素決定

首先 memory 引擎表能使用的最大內(nèi)存不能超過 max_heap_table_size 系統(tǒng)設(shè)置的值,該值默認(rèn)情況下是 16MB (還可以在會話時,臨時設(shè)置 max_heap_table_size 變量的值)

在創(chuàng)建時通過 CREATE TABLE 語句的 MAX_ROWS 選項,指定表中最大的記錄數(shù)的方式來限制表能夠使用的內(nèi)存空間

CSV 存儲引擎

CSV 存儲引擎是基于 CSV 格式文件存儲數(shù)據(jù)

通過指定 engine=csv 設(shè)置

CSV 存儲引擎因為自身文件格式的原因,所有列必須強制指定 NOT NULL ,另外 CSV 引擎也不支持索引,不支持分區(qū)

CSV 存儲引擎也會包含一個存儲表結(jié)構(gòu)的 .frm 文件,還會創(chuàng)建一個 .csv 存儲數(shù)據(jù)的文件,還會創(chuàng)建一個同名的元信息文件,該文件的擴展名為 .CSM ,用來保存表的狀態(tài)及表中保存的數(shù)據(jù)量

因為 csv 文件本身就可以直接被編輯,保不齊就有不按規(guī)則出牌的情況,如果出現(xiàn)csv 文件中的內(nèi)容損壞了的情況,也可以使用 CHECK TABLE 或者 REPAIR TABLE 命令檢查和修復(fù)

ARCHIVE 存儲引擎

ARCHIVE 存儲引擎適用場景恰如其名---歸檔,基于這個存儲引擎,能夠?qū)⒋罅繑?shù)據(jù)壓縮存儲,插入的列會被壓縮

使用了 zlib 無損數(shù)據(jù)壓縮算法,并且還可以使用 OPTIMIZE TABLE 分析表并使其打包成更小的格式

相同的數(shù)據(jù)量,ARCHIVE 存儲引擎 比 MyISAM 引擎小了近 8 倍

不足點:

目前 ARCHIVE 引擎僅能夠支持 INSERT 和 SELECT 語句,而不能支持 DELETE、REPLACE、UPDATE 語句

不支持索引

ARCHIVE 引擎除了擁有 .frm 結(jié)構(gòu)文件外,還有一個擴展名為 .arz 的數(shù)據(jù)文件

BLACKHOLE

黑洞存儲引擎,所有插入的數(shù)據(jù)并不會保存,BLACKHOLE 引擎表永遠保持為空

:) 我這里沒想到什么適用場景,故不做太多介紹

MERGE 存儲引擎

MERGE 存儲引擎,也被稱為 MGR_MyISAM 存儲引擎,它實際上是將一組 MyISAM 表聚合在一起,使用時就和一張表一樣

MERGE 存儲引擎,要求聚合的表結(jié)構(gòu)、索引要完全一致

使用 engine=merge union=(表名,表名) 創(chuàng)建

除了保存表結(jié)構(gòu)定義的 .frm 文件外,還有一個擴展名為 .mgr 的文件,這個文件不保存數(shù)據(jù),而是保存的數(shù)據(jù)來源地

MERGE 存儲引擎出了支持 SELECT 之外,還支持 UPDATE、DELETE 語句

需要支持 insert 語句的話,需要配置 INSERT_METHOD 指定插入的記錄保存到哪個表中

INSERT_METHOD 選項有三個值

NO: 不允許插入,這也是默認(rèn)值

FIRST 插入到第一個表

LAST 插入到最后一個表

MyISAN 存儲引擎

如果沒有指定表使用的存儲引擎,那么創(chuàng)建表的默認(rèn)存儲引擎就是 MyISAN (5.5 以前)

使用 engine=myisam; 設(shè)置

默認(rèn)會創(chuàng)建三個文件

frm 文件,用來存儲表的對象結(jié)構(gòu)

.MYD 文件,用來存儲數(shù)據(jù)

.MYI 文件,用來存儲索引

MyIASM 特性

最大存儲能力為 256TB

支持 B-tree 索引

支持全文索引

支持索引緩存

支持?jǐn)?shù)據(jù)壓縮

支持復(fù)制

支持查詢緩存

地理(三維)數(shù)據(jù)類型支持

地理數(shù)據(jù)索引支持

支持?jǐn)?shù)據(jù)加密

支持統(tǒng)計信息

鎖粒度到 table

支持備份/時間點恢復(fù)

MyISAN 不支持的

MVCC 不支持

clustered 索引不支持

hash 索引不支持

不支持事物

不支持?jǐn)?shù)據(jù)緩存

不支持外健約束

不支持行級鎖

MyISAM 主要優(yōu)點是:查詢快,寫入快

MyISAM 支持三種存儲格式:靜態(tài)(FIXED)、動態(tài)(DYNAMIC)、壓縮(COMPRESSED)
靜態(tài):

靜態(tài)指的是,表不包含(varchar/varbinary/blob/text)

靜態(tài)表會把以上字段類型會自動填充到達列的長度
較快,易于緩存
易于崩潰后重建
比動態(tài)表占用更多的磁盤空間

靜態(tài)表,很容易可以到磁盤中的數(shù)據(jù)文件定位和查找記錄,因為每一行記錄都是固定的

動態(tài):

包含(varchar/varbinary/blob/text)
除了字符串長度小于4的列外,其他字符串的長度都是動態(tài)的
比靜態(tài)的更節(jié)約空間

壓縮:

壓縮表是只允許已讀的,優(yōu)點在于更節(jié)省空間,更快
InnoDB 存儲引擎

mysql 5.5 之后。InnoDB 被認(rèn)定為默認(rèn)的存儲引擎

InnoDB 有下列關(guān)鍵特性

設(shè)計遵循 ACID 模型,支持事物,擁有從服務(wù)崩潰中恢復(fù)的能力,能過最大限度的保護用戶的數(shù)據(jù)

支持行級鎖,并且引入了類型 Oracle 數(shù)據(jù)庫中的一致性讀特性,以提升多用戶并發(fā)時的讀寫性能

InnoDB 引擎表組織數(shù)據(jù)時按照主鍵聚族,通過主鍵查找數(shù)據(jù)時性能極為優(yōu)異

在維護數(shù)據(jù)完整性方面,InnoDB 支持外建約束

在服務(wù)器發(fā)生故障的情況下,Mysql 服務(wù)在啟動時,會自動進行故障恢復(fù)

InnoDB 擁有自己的緩存池,常用的數(shù)據(jù)和索引都在緩存中

對于 INSERT,UPDATE,DELETE 操作,會被一種稱為 change buffering 的機制自動優(yōu)化

什么是 ACID ?

即事物的四個特性:原子性、一致性、隔離性、持久性

InnoDB 存儲引擎的特點

存儲能力 64TB

支持 MVCC

支持 B-tree 索引

支持 Clustered 索引

外建約束

查詢緩存

索引緩存

數(shù)據(jù)緩存

事物

地理(三維)數(shù)據(jù)類型支持

數(shù)據(jù)加密

數(shù)據(jù)壓縮

統(tǒng)計信息

支持行級鎖

備份/時間點恢復(fù)

復(fù)制支持

不支持的功能

不支持 Hash 索引

不支持全文索引

地理數(shù)據(jù)索引支持

InnoDB 和 MyISAM 的區(qū)別

InnoDB不支持FULLTEXT類型的索引。

InnoDB 中不保存表的具體行數(shù),也就是說,執(zhí)行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(*)語句包含 where條件時,兩種表的操作是一樣的。

對于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。

DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。

LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導(dǎo)入數(shù)據(jù)后再改成InnoDB表,但是對于使用的額外的InnoDB特性(例如外鍵)的表不適用。

另外,InnoDB表的行鎖也不是絕對的,假如在執(zhí)行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表,例如update table set num=1 where name like “%aaa%”

兩種類型最主要的差別就是Innodb 支持事務(wù)處理與外鍵和行級鎖.而MyISAM不支持.所以MyISAM往往就容易被人認(rèn)為只適合在小項目中使用。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21717.html

相關(guān)文章

  • 數(shù)據(jù)庫收集 - 收藏集 - 掘金

    摘要:前言在使用加載數(shù)據(jù)數(shù)據(jù)庫常見的優(yōu)化操作后端掘金一索引將放第一位,不用說,這種優(yōu)化方式我們一直都在悄悄使用,那便是主鍵索引。 Redis 內(nèi)存壓縮實戰(zhàn) - 后端 - 掘金在討論Redis內(nèi)存壓縮的時候,我們需要了解一下幾個Redis的相關(guān)知識。 壓縮列表 ziplist Redis的ziplist是用一段連續(xù)的內(nèi)存來存儲列表數(shù)據(jù)的一個數(shù)據(jù)結(jié)構(gòu),它的結(jié)構(gòu)示例如下圖 zlbytes: 記錄整...

    Little_XM 評論0 收藏0

發(fā)表評論

0條評論

lidashuang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<