1.MySQL的邏輯架構(gòu)
最上面不是mysql特有的,所有基于網(wǎng)絡(luò)的c/s的網(wǎng)絡(luò)應(yīng)用程序都應(yīng)該包括連接處理、認(rèn)證、安全管理等。
中間層是MySQL的核心,包括MySQL解析、分析、優(yōu)化和緩存等。同時它還提供跨存儲引擎的功能,包括MySQL、MySQL和MySQL等。
最下面是存儲引擎,它負(fù)責(zé)存取數(shù)據(jù)。服務(wù)器通過storage engine MySQL可以和各種存儲引擎進(jìn)行交互。
1.1、查詢優(yōu)化和執(zhí)行(Optimization and Execution)
MySQL將用戶的查詢語句進(jìn)行解析,并創(chuàng)建一個內(nèi)部的數(shù)據(jù)結(jié)構(gòu)——分析樹,然后進(jìn)行各種優(yōu)化,例如重寫查詢、選擇讀取表的順序,以及使用哪個MySQL等。查詢優(yōu)化器不關(guān)心一個表所使用的存儲引擎,但是存儲引擎會影響服務(wù)器如何優(yōu)化查詢。優(yōu)化器通過存儲引擎獲取一些參數(shù)、某個操作的執(zhí)行代價、以及統(tǒng)計(jì)信息等。在解析查詢之前,服務(wù)器會先訪問查詢緩存(query cache)——它存儲SELECT語句以及相應(yīng)的查詢結(jié)果集。如果某個查詢結(jié)果已經(jīng)位于緩存中,服務(wù)器就不會再對查詢進(jìn)行解析、優(yōu)化、以及執(zhí)行。它僅僅將緩存中的結(jié)果返回給用戶即可,這將大大提高系統(tǒng)的性能。
1.2、并發(fā)控制
MySQL提供兩個級別的并發(fā)控制:服務(wù)器級(the server level)和存儲引擎級(the storage engine level)。加鎖是實(shí)現(xiàn)并發(fā)控制的基本方法,MySQL中鎖的粒度:
(1) 表級鎖:MySQL獨(dú)立于存儲引擎提供表鎖,例如,對于ALTER TABLE語句,服務(wù)器提供表鎖(table-level lock)。
(2)行級鎖:InnoDB和Falcon存儲引擎提供行級鎖,此外,BDB支持頁級鎖。InnoDB的并發(fā)控制機(jī)制,下節(jié)詳細(xì)討論。