国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

有趣的 Mysql 存儲引擎

lidashuang / 1735人閱讀

摘要:提供了一套統(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 存儲引擎因為自身文件格式的原因,所有列必須強(qiáng)制指定 NOT NULL ,另外 CSV 引擎也不支持索引,不支持分區(qū)

CSV 存儲引擎也會包含一個存儲表結(jié)構(gòu)的 .frm 文件,還會創(chuàng)建一個 .csv 存儲數(shù)據(jù)的文件,還會創(chuàng)建一個同名的元信息文件,該文件的擴(kuò)展名為 .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)文件外,還有一個擴(kuò)展名為 .arz 的數(shù)據(jù)文件

BLACKHOLE

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

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

MERGE 存儲引擎

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

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

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

除了保存表結(jié)構(gòu)定義的 .frm 文件外,還有一個擴(kuò)展名為 .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)表會把以上字段類型會自動填充到達(dá)列的長度
較快,易于緩存
易于崩潰后重建
比動態(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ù)的能力,能過最大限度的保護(hù)用戶的數(shù)據(jù)

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

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

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

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

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

對于 INSERT,UPDATE,DELETE 操作,會被一種稱為 change buffering 的機(jī)制自動優(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://m.specialneedsforspecialkids.com/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元查看
<