一. MySQL體系結(jié)構(gòu)
1膝捞、Connectors指的是不同語(yǔ)言中與SQL的交互
2、Management Serveices & Utilities: 系統(tǒng)管理和控制工具
3堵幽、Connection Pool: 連接池
管理緩沖用戶(hù)連接垫释,線(xiàn)程處理等需要緩存的需求拓挥。
4、SQL Interface: SQL接口
接受用戶(hù)的SQL命令算芯,并且返回用戶(hù)需要查詢(xún)的結(jié)果柒昏。比如select from就是調(diào)用SQL Interface。
5熙揍、Parser: 解析器职祷。
SQL命令傳遞到解析器的時(shí)候會(huì)被解析器驗(yàn)證和解析。解析器是由Lex和YACC實(shí)現(xiàn)的届囚,是一個(gè)很長(zhǎng)的腳本有梆。
主要功能:
a . 將SQL語(yǔ)句分解成數(shù)據(jù)結(jié)構(gòu),并將這個(gè)結(jié)構(gòu)傳遞到后續(xù)步驟意系,以后SQL語(yǔ)句的傳遞和處理就是基于這個(gè)結(jié)構(gòu)的 泥耀。
b. 如果在分解構(gòu)成中遇到錯(cuò)誤,那么就說(shuō)明這個(gè)sql語(yǔ)句是不合理的蛔添。
6痰催、Optimizer: 查詢(xún)優(yōu)化器
SQL語(yǔ)句在查詢(xún)之前會(huì)使用查詢(xún)優(yōu)化器對(duì)查詢(xún)進(jìn)行優(yōu)化兜辞。他使用的是“選取-投影-聯(lián)接”策略進(jìn)行查詢(xún)。
用一個(gè)例子就可以理解: select uid,name from user where gender = f;
這個(gè)select 查詢(xún)先根據(jù)where 語(yǔ)句進(jìn)行選取夸溶,而不是先將表全部查詢(xún)出來(lái)以后再進(jìn)行g(shù)ender過(guò)濾逸吵。
這個(gè)select查詢(xún)先根據(jù)uid和name進(jìn)行屬性投影,而不是將屬性全部取出以后再進(jìn)行過(guò)濾缝裁。
將這兩個(gè)查詢(xún)條件聯(lián)接起來(lái)生成最終查詢(xún)結(jié)果胁塞。
7、Cache和Buffer: 查詢(xún)緩存
如果查詢(xún)緩存有命中的查詢(xún)結(jié)果压语,查詢(xún)語(yǔ)句就可以直接去查詢(xún)緩存中取數(shù)據(jù)。
這個(gè)緩存機(jī)制是由一系列小緩存組成的编检。比如表緩存胎食,記錄緩存,key緩存允懂,權(quán)限緩存等厕怜。
8、Engine :存儲(chǔ)引擎
存儲(chǔ)引擎是MySql中具體的與文件打交道的子系統(tǒng)蕾总。也是Mysql最具有特色的一個(gè)地方粥航。
Mysql的存儲(chǔ)引擎是插件式的。它根據(jù)MySql AB公司提供的文件訪(fǎng)問(wèn)層的一個(gè)抽象接口來(lái)定制一種文件訪(fǎng)問(wèn)機(jī)制(這種訪(fǎng)問(wèn)機(jī)制就叫存儲(chǔ)引擎)生百。
現(xiàn)在有很多種存儲(chǔ)引擎递雀,各個(gè)存儲(chǔ)引擎的優(yōu)勢(shì)各不一樣,最常用的MyISAM,InnoDB,BDB蚀浆。
默認(rèn)下MySql是使用MyISAM引擎缀程,它查詢(xún)速度快,有較好的索引優(yōu)化和數(shù)據(jù)壓縮技術(shù)市俊。但是它不支持事務(wù)杨凑。
InnoDB支持事務(wù),并且提供行級(jí)的鎖定摆昧,應(yīng)用也相當(dāng)廣泛撩满。
Mysql也支持自己定制存儲(chǔ)引擎,甚至一個(gè)庫(kù)中不同的表使用不同的存儲(chǔ)引擎绅你,這些都是允許的伺帘。
二. 存儲(chǔ)引擎
如何選擇合適引擎?
四方面考慮
1. 事務(wù)
需事務(wù)支持選InnoDB
無(wú)事務(wù)支持忌锯,且主要是select,insert操作曼追,選MyISAM
2. 備份
需在線(xiàn)熱備份選InoDB
3. 崩潰恢復(fù)
InnoDB崩潰損壞概率低于MyISAM,崩潰恢復(fù)較快
4. 特有特性
如MyISAM支持地理空間搜索