mysql中基礎(chǔ)知識的示例分析

這篇文章將為大家詳細(xì)講解有關(guān)MySQL中基礎(chǔ)知識的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

專業(yè)從事成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,高端網(wǎng)站制作設(shè)計(jì),微信小程序開發(fā),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊(duì)竭力真誠服務(wù),采用html5+CSS3前端渲染技術(shù),成都響應(yīng)式網(wǎng)站建設(shè)公司,讓網(wǎng)站在手機(jī)、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項(xiàng)小組,與您實(shí)時(shí)在線互動(dòng),隨時(shí)提供解決方案,暢聊想法和感受。

mysql架構(gòu)

一、網(wǎng)絡(luò)連接層

客戶端連接器(Client Connectors):提供與MySQL服務(wù)器建立的支持。目前幾乎支持所有主流 的服務(wù)端編程技術(shù),例如常見的 Java、C、Python、.NET等,它們通過各自API技術(shù)與MySQL建立連接

二、服務(wù)層(MySQL Server)

服務(wù)層是MySQL Server的核心,主要包含系統(tǒng)管理和控制工具、連接池、SQL接口、解析器、查詢優(yōu)化器和緩存六個(gè)部分。

連接池(Connection Pool):負(fù)責(zé)存儲和管理客戶端與數(shù)據(jù)庫的連接,一個(gè)線程負(fù)責(zé)管理一個(gè)連接。

系統(tǒng)管理和控制工具(Management Services & Utilities):例如備份恢復(fù)、安全管理、集群 管理等

SQL接口(SQL Interface):用于接受客戶端發(fā)送的各種SQL命令,并且返回用戶需要查詢的結(jié) 果。比如DML、DDL、存儲過程、視圖、觸發(fā)器等。

解析器(Parser):負(fù)責(zé)將請求的SQL解析生成一個(gè)"解析樹"。然后根據(jù)一些MySQL規(guī)則進(jìn)一步 檢查解析樹是否合法。

查詢優(yōu)化器(Optimizer):當(dāng)“解析樹”通過解析器語法檢查后,將交由優(yōu)化器將其轉(zhuǎn)化成執(zhí)行計(jì) 劃,然后與存儲引擎交互。

select uid,name from user where gender=1;

選取–》投影–》聯(lián)接 策略

1)select先根據(jù)where語句進(jìn)行選取,并不是查詢出全部數(shù)據(jù)再過濾

2)select查詢根據(jù)uid和name進(jìn)行屬性投影,并不是取出所有字段

3)將前面選取和投影聯(lián)接起來最終生成查詢結(jié)果

緩存(Cache&Buffer): 緩存機(jī)制是由一系列小緩存組成的。比如表緩存,記錄緩存,權(quán)限緩 存,引擎緩存等。如果查詢緩存有命中的查詢結(jié)果,查詢語句就可以直接去查詢緩存中取數(shù)據(jù)。

三、存儲引擎層(Pluggable Storage Engines)

存儲引擎負(fù)責(zé)MySQL中數(shù)據(jù)的存儲與提取,與底層系統(tǒng)文件進(jìn)行交互。MySQL存儲引擎是插件式的, 服務(wù)器中的查詢執(zhí)行引擎通過接口與存儲引擎進(jìn)行通信,接口屏蔽了不同存儲引擎之間的差異 。現(xiàn)在有 很多種存儲引擎,各有各的特點(diǎn),最常見的是MyISAM和InnoDB。

四、系統(tǒng)文件層(File System)

該層負(fù)責(zé)將數(shù)據(jù)庫的數(shù)據(jù)和日志存儲在文件系統(tǒng)之上,并完成與存儲引擎的交互,是文件的物理存儲層。主要包含日志文件,數(shù)據(jù)文件,配置文件,pid 文件,socket 文件等。

日志文件

錯(cuò)誤日志(Error log)

默認(rèn)開啟,show variables like ‘%log_error%’

通用查詢?nèi)罩?General query log)

記錄一般查詢語句,show variables like ‘%general%’;

二進(jìn)制日志(binary log)

記錄了對MySQL數(shù)據(jù)庫執(zhí)行的更改操作,并且記錄了語句的發(fā)生時(shí)間、執(zhí)行時(shí)長;但是它不 記錄select、show等不修改數(shù)據(jù)庫的SQL。主要用于數(shù)據(jù)庫恢復(fù)和主從復(fù)制。

show variables like ‘%log_bin%’; //是否開啟

show variables like ‘%binlog%’; //參數(shù)查看

show binary logs;//查看日志文件 慢

查詢?nèi)罩?Slow query log)

記錄所有執(zhí)行時(shí)間超時(shí)的查詢SQL,默認(rèn)是10秒。

show variables like ‘%slow_query%’; //是否開啟

show variables like ‘%long_query_time%’; //時(shí)長

配置文件

用于存放MySQL所有的配置信息文件,比如my.cnf、my.ini等。

數(shù)據(jù)文件

db.opt 文件:記錄這個(gè)庫的默認(rèn)使用的字符集和校驗(yàn)規(guī)則。

frm 文件:存儲與表相關(guān)的元數(shù)據(jù)(meta)信息,包括表結(jié)構(gòu)的定義信息等,每一張表都會(huì) 有一個(gè)frm 文件。

MYD 文件:MyISAM 存儲引擎專用,存放 MyISAM 表的數(shù)據(jù)(data),每一張表都會(huì)有一個(gè) .MYD 文件。

MYI 文件:MyISAM 存儲引擎專用,存放 MyISAM 表的索引相關(guān)信息,每一張 MyISAM 表對 應(yīng)一個(gè) .MYI 文件。

ibd文件和 IBDATA 文件:存放 InnoDB 的數(shù)據(jù)文件(包括索引)。InnoDB 存儲引擎有兩種 表空間方式:獨(dú)享表空間和共享表空間。獨(dú)享表空間使用 .ibd 文件來存放數(shù)據(jù),且每一張 InnoDB 表對應(yīng)一個(gè) .ibd 文件。共享表空間使用 .ibdata 文件,所有表共同使用一個(gè)(或多 個(gè),自行配置).ibdata 文件。

ibdata1 文件:系統(tǒng)表空間數(shù)據(jù)文件,存儲表元數(shù)據(jù)、Undo日志等 。

ib_logfile0、ib_logfile1 文件:Redo log 日志文件。

pid 文件

pid 文件是 mysqld 應(yīng)用程序在 Unix/Linux 環(huán)境下的一個(gè)進(jìn)程文件,和許多其他 Unix/Linux 服務(wù)端程序一樣,它存放著自己的進(jìn)程 id。

socket 文件

socket 文件也是在 Unix/Linux 環(huán)境下才有的,用戶在 Unix/Linux 環(huán)境下客戶端連接可以不通過 TCP/IP 網(wǎng)絡(luò)而直接使用 Unix Socket 來連接 MySQL。

InnoDB和MyISAM

事務(wù)和外鍵

InnoDB支持事務(wù)和外鍵,具有安全性和完整性,適合大量insert或update操作

MyISAM不支持事務(wù)和外鍵,它提供高速存儲和檢索,適合大量的select查詢操作

鎖機(jī)制

InnoDB支持行級鎖,鎖定指定記錄?;谒饕齺砑渔i實(shí)現(xiàn)。

MyISAM支持表級鎖,鎖定整張表。

索引結(jié)構(gòu)

InnoDB使用聚集索引(聚簇索引),索引和記錄在一起存儲,既緩存索引,也緩存記錄。

MyISAM使用非聚集索引(非聚簇索引),索引和記錄分開。

并發(fā)處理能力

MyISAM使用表鎖,會(huì)導(dǎo)致寫操作并發(fā)率低,讀之間并不阻塞,讀寫阻塞。

InnoDB讀寫阻塞可以與隔離級別有關(guān),可以采用多版本并發(fā)控制(MVCC)來支持高并發(fā)

存儲文件

InnoDB表對應(yīng)兩個(gè)文件,一個(gè).frm表結(jié)構(gòu)文件,一個(gè).ibd數(shù)據(jù)文件。InnoDB表最大支持64TB;

MyISAM表對應(yīng)三個(gè)文件,一個(gè).frm表結(jié)構(gòu)文件,一個(gè)MYD表數(shù)據(jù)文件,一個(gè).MYI索引文件。從 MySQL5.0開始默認(rèn)限制是256TB。

Redo Log和Binlog區(qū)別

Redo Log是屬于InnoDB引擎功能,Binlog是屬于MySQL Server自帶功能,并且是以二進(jìn)制 文件記錄。

Redo Log屬于物理日志,記錄該數(shù)據(jù)頁更新狀態(tài)內(nèi)容,Binlog是邏輯日志,記錄更新過程。

Redo Log日志是循環(huán)寫,日志空間大小是固定,Binlog是追加寫入,寫完一個(gè)寫下一個(gè),不 會(huì)覆蓋使用。

Redo Log作為服務(wù)器異常宕機(jī)后事務(wù)數(shù)據(jù)自動(dòng)恢復(fù)使用,Binlog可以作為主從復(fù)制和數(shù)據(jù)恢 復(fù)使用。Binlog沒有自動(dòng)crash-safe能力。

在應(yīng)用中可以在從庫追加多個(gè)索引來優(yōu)化查詢,主庫這些索引可以不加,用于提升寫效率。

讀寫分離方案

1寫后立刻讀

在寫入數(shù)據(jù)庫后,某個(gè)時(shí)間段內(nèi)讀操作就去主庫,之后讀操作訪問從庫。

2二次查詢

先去從庫讀取數(shù)據(jù),找不到時(shí)就去主庫進(jìn)行數(shù)據(jù)讀取。該操作容易將讀壓力返還給主庫,為了避免 惡意攻擊,建議對數(shù)據(jù)庫訪問API操作進(jìn)行封裝,有利于安全和低耦合。

3根據(jù)業(yè)務(wù)特殊處理

根據(jù)業(yè)務(wù)特點(diǎn)和重要程度進(jìn)行調(diào)整,比如重要的,實(shí)時(shí)性要求高的業(yè)務(wù)數(shù)據(jù)讀寫可以放在主庫。對 于次要的業(yè)務(wù),實(shí)時(shí)性要求不高可以進(jìn)行讀寫分離,查詢時(shí)去從庫查詢。

關(guān)于“mysql中基礎(chǔ)知識的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

網(wǎng)站題目:mysql中基礎(chǔ)知識的示例分析
網(wǎng)站網(wǎng)址:http://muchs.cn/article8/joppip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、外貿(mào)網(wǎng)站建設(shè)、定制網(wǎng)站品牌網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司