久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Mysql進(jìn)階篇(一)之存儲(chǔ)引擎

 云哥技術(shù)yun3k 2023-07-05 發(fā)布于江蘇

一. MySQL體系結(jié)構(gòu)

1. 連接層

最上層是一些客戶端和鏈接服務(wù),,包含本地sock通信和大多數(shù)基于客戶端/服務(wù)端工具實(shí)現(xiàn)的類似于TCP/IP的通信。主要完成一些類似于連接處理,、授權(quán)認(rèn)證及相關(guān)的安全方案,。在該層上引入了線程池的概念,為通過(guò)認(rèn)證安全接入的客戶端提供線程,。同樣在該層上可以實(shí)現(xiàn)基于SSL的安全鏈接,。服務(wù)器也會(huì)為安全接入的每個(gè)客戶端驗(yàn)證它所具有的操作權(quán)限。

2. 服務(wù)層

第二層架構(gòu)主要完成大多數(shù)的核心服務(wù)功能,,如SQL接口,,并完成緩存的查詢,,SQL的分析和優(yōu)化,部分內(nèi)置函數(shù)的執(zhí)行,。所有跨存儲(chǔ)引擎的功能也在這一層實(shí)現(xiàn),,如過(guò)程、函數(shù)等,。在該層,,服務(wù)器會(huì)解析查詢并創(chuàng)建相應(yīng)的內(nèi)部解析樹(shù),并對(duì)其完成相應(yīng)的優(yōu)化如確定表的查詢順序,,是否利用索引等,,最后生成相應(yīng)的執(zhí)行操作。如果是select語(yǔ)句,,服務(wù)器還會(huì)查詢內(nèi)部的緩存,,如果緩存空間足夠大,這樣在解決大量讀操作的環(huán)境中能夠很好的提升系統(tǒng)的性能,。

3. 引擎層

存儲(chǔ)引擎層,,存儲(chǔ)引擎真正的負(fù)責(zé)了MySQL中數(shù)據(jù)的存儲(chǔ)和提取,服務(wù)器通過(guò)API和存儲(chǔ)引擎進(jìn)行通信,。不同的存儲(chǔ)引擎具有不同的功能,,這樣我們可以根據(jù)自己的需求來(lái)選取合適的存儲(chǔ)引擎。數(shù)據(jù)庫(kù)中的索引是在存儲(chǔ)引擎層實(shí)現(xiàn)的,。

4. 存儲(chǔ)層

數(shù)據(jù)存儲(chǔ)層,,主要是將數(shù)據(jù)(如:redolog、undolog,、數(shù)據(jù),、索引、二進(jìn)制日志,、錯(cuò)誤日志,、查詢?nèi)罩尽⒙樵內(nèi)罩镜龋┐鎯?chǔ)在文件系統(tǒng)之上,,并完成與存儲(chǔ)引擎的交互,。

和其他數(shù)據(jù)庫(kù)相比,,MySQL有點(diǎn)與眾不同,,它的架構(gòu)可以在多種不同場(chǎng)景中應(yīng)用并發(fā)揮良好作用。主要體現(xiàn)在存儲(chǔ)引擎上,,插件式的存儲(chǔ)引擎架構(gòu),,將查詢處理和其他的系統(tǒng)任務(wù)以及數(shù)據(jù)的存儲(chǔ)提取分離。這種架構(gòu)可以根據(jù)業(yè)務(wù)的需求和實(shí)際需要選擇合適的存儲(chǔ)引擎,。

二. 存儲(chǔ)引擎介紹

存儲(chǔ)引擎就是存儲(chǔ)數(shù)據(jù),、建立索引,、更新/查詢數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方式。存儲(chǔ)引擎是基于表的,,而不是基于庫(kù)的,,所以存儲(chǔ)引擎也可稱為表類型。我們可以在創(chuàng)建表的時(shí)候,,來(lái)指定選擇的存儲(chǔ)引擎,,如果沒(méi)有指定將自動(dòng)選擇默認(rèn)的存儲(chǔ)引擎。

1. 建表時(shí)指定存儲(chǔ)引擎

1CREATE TABLE 表名( 
2    字段1 字段1類型 [ COMMENT 字段1注釋 ] , 
3    ...... 
4    字段n 字段n類型 [COMMENT 字段n注釋 ] 
5ENGINE = INNODB [ COMMENT 表注釋 ] ;

(1). 案例1:查詢建表語(yǔ)句 --- 默認(rèn)存儲(chǔ)引擎:InnoDB

1show create table account;

2. 查詢當(dāng)前數(shù)據(jù)庫(kù)支持的存儲(chǔ)引擎

1show engines;

(1). 案例1:創(chuàng)建表my_myisam,,并指定MyISAM存儲(chǔ)引擎

1create table my_myisam( 
2    id int
3    name varchar(10
4engine = MyISAM;

(2). 創(chuàng)建表my_memory,,指定Memory存儲(chǔ)引擎

1create table my_memory( 
2    id int
3    name varchar(10
4engine = Memory;

三. 存儲(chǔ)引擎特點(diǎn)

1. InnoDB

(1). 介紹

InnoDB是一種兼顧高可靠性和高性能的通用存儲(chǔ)引擎,在MySQL 5.5之后,,InnoDB是默認(rèn)的MySQL存儲(chǔ)引擎,。

(2). 特點(diǎn)

  • DML操作遵循ACID模型,支持事務(wù),;

  • 行級(jí)鎖,,提高并發(fā)訪問(wèn)性能;

  • 支持外鍵FOREIGN KEY約束,,保證數(shù)據(jù)的完整性和正確性,;

(3). 文件

xxx.ibd:xxx代表的是表名,innoDB引擎的每張表都會(huì)對(duì)應(yīng)這樣一個(gè)表空間,,存儲(chǔ)該表的表結(jié)構(gòu)(frm-早期的,、sdi-新版的)、數(shù)據(jù)和索引,。

參數(shù):innodb_file_per_table

1show variables like 'innodb_file_per_table';

如果該參數(shù)開(kāi)啟,,代表對(duì)于InnoDB引擎的表,每一張表都對(duì)應(yīng)一個(gè)ibd文件,。我們直接打開(kāi)MySQL的數(shù)據(jù)存放目錄,,這個(gè)目錄下有很多文件夾,不同的文件夾代表不同的數(shù)據(jù)庫(kù),,我們直接打開(kāi)yun3k文件夾,。

可以看到里面有很多的idb文件,每一個(gè)ibd文件就對(duì)應(yīng)一張表,,比如:我們有一張表account,,就會(huì)有這樣一個(gè)account.ibd文件,而在這個(gè)ibd文件中不僅存放表結(jié)構(gòu),、數(shù)據(jù),、還會(huì)存放該表對(duì)應(yīng)的索引信息。而該文件是基于二進(jìn)制存儲(chǔ)的,,不能直接基于記事本打開(kāi),,我們可以使用mysql提供的一個(gè)指令ibd2sdi,,通過(guò)該指令就可以從ibd文件中提取sdi信息,而sdi數(shù)據(jù)字典信息中就包含該表的表結(jié)構(gòu),。

(4). 邏輯存儲(chǔ)結(jié)構(gòu)

  • 表空間:InnoDB存儲(chǔ)引擎邏輯結(jié)構(gòu)的最高層,,ibd文件其實(shí)就是表空間文件,在表空間中可以包含多個(gè)Segment段,。

  • 段:表空間是由各個(gè)段組建的,,常見(jiàn)的段有數(shù)據(jù)段、索引段,、回滾段等,。InnoDB中對(duì)于段的管理,都是引擎自身完成,,不需要人為對(duì)其控制,,一個(gè)段中包含多個(gè)區(qū)。

  • 區(qū):區(qū)是表空間的單元結(jié)構(gòu),,每個(gè)區(qū)的大小為1M,。默認(rèn)情況下,InnoDB存儲(chǔ)引擎頁(yè)大小為16k,,即一個(gè)區(qū)中一共有64個(gè)連續(xù)的頁(yè),。

  • 頁(yè):頁(yè)是組成區(qū)的最小單元,頁(yè)也是InnoDB存儲(chǔ)引擎磁盤(pán)管理的最小單元,,每個(gè)頁(yè)的大小默認(rèn)為16KB,。為了保證頁(yè)的連續(xù)性,InnoDB存儲(chǔ)引擎每次從磁盤(pán)申請(qǐng)4-5個(gè)區(qū),。

  • 行:InnoDB存儲(chǔ)引擎是面向行的,,也就是說(shuō)數(shù)據(jù)是按行進(jìn)行存放的,在每一行中除了定義表時(shí)所指定的字段以外,,還包含兩個(gè)隱藏字段(后面會(huì)詳細(xì)介紹),。

2. MyISAM

(1). 介紹

MyISAM是MySQL早期的默認(rèn)存儲(chǔ)引擎。

(2). 特點(diǎn)

不支持事務(wù),,不支持外鍵

支持表鎖,,不支持行鎖

訪問(wèn)速度快

(3). 文件

xxx.sdi:存儲(chǔ)表結(jié)構(gòu)信息

xxx.MYD:存儲(chǔ)數(shù)據(jù)

xxx.MYI:存儲(chǔ)索引

3. Memory

(1). 介紹

Memory引擎的表數(shù)據(jù)是存儲(chǔ)在內(nèi)存中的,由于受到硬件問(wèn)題或斷電問(wèn)題的影響,,只能將這些表作為臨時(shí)表或緩存使用,。

(2). 特點(diǎn)

內(nèi)存存放

hash索引(默認(rèn))

(3). 文件

xxx.sdi:存儲(chǔ)表結(jié)構(gòu)信息

4. InnoDB、MyISAM和Memory的區(qū)別及特點(diǎn)

特點(diǎn)InnoDBMyISAMMemory
存儲(chǔ)限制64TB
事務(wù)安全支持--
鎖機(jī)制行鎖表鎖表鎖
B+tree索引支持支持支持
Hash索引--支持
全文索引支持(5.6版本之后)支持-
空間使用N/A
內(nèi)存使用中等
批量插入速度
支持外鍵支持-

四. 存儲(chǔ)引擎的選擇

在選擇存儲(chǔ)引擎時(shí),,應(yīng)該根據(jù)應(yīng)用系統(tǒng)的特點(diǎn)選擇合適的存儲(chǔ)引擎,。對(duì)于復(fù)雜的應(yīng)用系統(tǒng),還可以根據(jù)實(shí)際情況選擇多種存儲(chǔ)引擎進(jìn)行結(jié)合,。

  • InnoDB:是Mysql的默認(rèn)存儲(chǔ)引擎,,支持事務(wù)、外鍵,。如果應(yīng)用對(duì)事務(wù)的完整性有比較高的要求,,在并發(fā)條件下要求數(shù)據(jù)的一致性,數(shù)據(jù)操作除了插入和查詢之外,,還包含很多的更新,、刪除操作,那么InnoDB存儲(chǔ)引擎是比較合適的選擇,。

  • MyISAM:如果應(yīng)用是以讀操作和插入操作為主,,只有很少的更新和刪除操作,并且對(duì)事務(wù)的完整性,、并發(fā)性要求不是很高,,那么選擇這個(gè)存儲(chǔ)引擎是非常合適的。

  • Memory:將所有數(shù)據(jù)保存在內(nèi)存中,,訪問(wèn)速度快,,通常用于臨時(shí)表及緩存。MEMORY的缺陷就是對(duì)表的大小有限制,,太大的表無(wú)法緩存在內(nèi)存中,,而且無(wú)法保障數(shù)據(jù)的安全。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多