亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

有趣的 Mysql 存儲(chǔ)引擎

lidashuang / 1799人閱讀

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

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

下面介紹使用最廣泛的存儲(chǔ)引擎

memory 存儲(chǔ)引擎

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

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

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

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

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

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

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

CSV 存儲(chǔ)引擎

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

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

CSV 存儲(chǔ)引擎因?yàn)樽陨砦募袷降脑?,所有列必須?qiáng)制指定 NOT NULL ,另外 CSV 引擎也不支持索引,不支持分區(qū)

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

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

ARCHIVE 存儲(chǔ)引擎

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

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

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

不足點(diǎn):

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

不支持索引

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

BLACKHOLE

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

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

MERGE 存儲(chǔ)引擎

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

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

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

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

MERGE 存儲(chǔ)引擎出了支持 SELECT 之外,還支持 UPDATE、DELETE 語(yǔ)句

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

INSERT_METHOD 選項(xiàng)有三個(gè)值

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

FIRST 插入到第一個(gè)表

LAST 插入到最后一個(gè)表

MyISAN 存儲(chǔ)引擎

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

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

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

frm 文件,用來(lái)存儲(chǔ)表的對(duì)象結(jié)構(gòu)

.MYD 文件,用來(lái)存儲(chǔ)數(shù)據(jù)

.MYI 文件,用來(lái)存儲(chǔ)索引

MyIASM 特性

最大存儲(chǔ)能力為 256TB

支持 B-tree 索引

支持全文索引

支持索引緩存

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

支持復(fù)制

支持查詢緩存

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

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

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

支持統(tǒng)計(jì)信息

鎖粒度到 table

支持備份/時(shí)間點(diǎn)恢復(fù)

MyISAN 不支持的

MVCC 不支持

clustered 索引不支持

hash 索引不支持

不支持事物

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

不支持外健約束

不支持行級(jí)鎖

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

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

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

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

靜態(tài)表,很容易可以到磁盤中的數(shù)據(jù)文件定位和查找記錄,因?yàn)槊恳恍杏涗浂际枪潭ǖ?

動(dòng)態(tài):

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

壓縮:

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

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

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

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

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

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

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

在服務(wù)器發(fā)生故障的情況下,Mysql 服務(wù)在啟動(dòng)時(shí),會(huì)自動(dòng)進(jìn)行故障恢復(fù)

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

對(duì)于 INSERT,UPDATE,DELETE 操作,會(huì)被一種稱為 change buffering 的機(jī)制自動(dòng)優(yōu)化

什么是 ACID ?

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

InnoDB 存儲(chǔ)引擎的特點(diǎn)

存儲(chǔ)能力 64TB

支持 MVCC

支持 B-tree 索引

支持 Clustered 索引

外建約束

查詢緩存

索引緩存

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

事物

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

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

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

統(tǒng)計(jì)信息

支持行級(jí)鎖

備份/時(shí)間點(diǎn)恢復(fù)

復(fù)制支持

不支持的功能

不支持 Hash 索引

不支持全文索引

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

InnoDB 和 MyISAM 的區(qū)別

InnoDB不支持FULLTEXT類型的索引。

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

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

DELETE FROM table時(shí),InnoDB不會(huì)重新建立表,而是一行一行的刪除。

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/21717.html

相關(guān)文章

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

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

    Little_XM 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

lidashuang

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<