標籤:
Mysql體繫結構與Mysql儲存引擎
Mysql體繫結構
mysql體繫結構圖:
1) Connectors:指的是不同語言中與SQL的互動
max_connections 就是整個MySQL執行個體的最大串連數限制
max_user_connections 是單個使用者的最大串連數,這裡未指明是哪個使用者,是任意一個使用者。
2) Management Serveices & Utilities:系統管理和控制工具
備份和恢複的安全性,複製,叢集,管理,配置,遷移和中繼資料
3) Connection Pool: 串連池
進行身分識別驗證、線程重用,串連限制,檢查記憶體,資料緩衝;系統管理使用者的串連,線程處理等需要緩衝的需求。
4) SQL Interface: SQL介面
進行DML、DDL,預存程序、視圖、觸發器等操作和管理;使用者通過SQL命令來查詢所需結果。
5) Parser: 解析器
查詢翻譯對象的特權;SQL命令傳遞到解析器的時候會被解析器驗證和解析。
6) Optimizer: 查詢最佳化工具
SQL語句在查詢之前會使用查詢最佳化工具對查詢進行最佳化。他使用的是“選取-投影-聯結”策略進行查詢。
使用者也可以請求伺服器給出最佳化過程的各種說明,以獲知伺服器的最佳化策略,為使用者提供了參數基準,以便使用者可以重寫查詢,架構和修改相關伺服器配置,便於mysql更高效的運行。
7) Cache和Buffer: 查詢快取
在解析查詢之前,要查詢快取,這個緩衝只能儲存查詢資訊以及結果資料。如果請求一個查詢在緩衝 中存在,就不需要解析,最佳化和執行查詢了。直接返回緩衝中所存放的這個查詢的結果。這個緩衝機制是由一系列小緩衝組成的,比如表緩衝,記錄緩衝,key緩衝,許可權緩衝等。
8) Engine:儲存引擎
Mysql支援多種儲存引擎,最常用的儲存引擎為MyIsam和InnoDB。
最佳化器並是不關心表使用了哪種儲存引擎,但是儲存引擎對伺服器最佳化查詢的方式是有影響的。最佳化器需要知道儲存引擎的一些特性:具體操作的效能和開銷方面的資訊,以及表內資料的統計資訊。例如,儲存引擎支援哪些索引類型,這對於查詢是非常有用的。
總結:mysql體繫結構分為三層,分別為:用戶端串連層,sql層,儲存引擎層。用戶端串連層主要指不同的語言與資料庫的互動,如jdbc,odbc,php等。sql層是mysql體繫結構的核心,主要又包括系統管理和控制工具(db的備份,恢複,複製,遷移等),串連池(主要負責使用者的串連請求驗證,許可權驗證和安全性等),SQL介面,查詢快取(只儲存查詢資訊和資料結果),解析器,最佳化層(當有一條新的查詢語句時,DBMS會先查看查詢快取,如果請求的查詢在緩衝中存在,則不用進行解析,最佳化和執行的操作,直接從查詢快取中讀取即可,但如果請求的查詢在查詢快取中不存在,則解析器會對查詢語句進行分析,然後對其進行各種最佳化,這些最佳化包括了,查詢語句的重寫,讀表的順序,索引的選擇等等)。儲存引擎層(Mysql最常用的儲存引擎有MyIsam,InnoDB等)。
Mysql儲存引擎
l MyISAM:不是事務安全的,而且不支援外鍵,適合在以下幾種情況下使用:
- 選擇密集型的表。MyISAM儲存引擎在篩選大量資料時非常迅速,這是它最突出的優點。
- 插入密集型的表。MyISAM的並發插入特性允許同時選擇和插入資料。例如:MyISAM儲存引擎很適合管理郵件或Web伺服器日誌資料。
l InnoDB:支援事務安全的引擎,支援外鍵、行鎖、事務是他的最大特點,適合在以下幾種情況下使用:
- 更新密集的表。InnoDB儲存引擎特別適合處理多重並發的更新要求。
- 事務。InnoDB儲存引擎是支援事務的標準MySQL儲存引擎。
- 自動災難恢複。與其它儲存引擎不同,InnoDB表能夠自動從災難中恢複。
- 外鍵約束。MySQL支援外鍵的儲存引擎只有InnoDB。
- 支援自動增加列AUTO_INCREMENT屬性。
一般來說,如果需要事務支援,並且有較高的並發讀取頻率,InnoDB是不錯的選擇。
l Memory:使用MySQL Memory儲存引擎的出發點是速度。為得到最快的回應時間,採用的邏輯儲存介質是系統記憶體。雖然在記憶體中儲存表資料確實會提供很高的效能,但當 mysqld守護進程崩潰時,所有的Memory資料都會丟失。獲得速度的同時也帶來了一些缺陷。它要求儲存在Memory資料表裡的資料使用的是長度不變的格式,這意味著不能使用BLOB和TEXT這樣的長度可變的資料類型,VARCHAR是一種長度可變的類型,但因為它在MySQL內部當做長度固定不 變的CHAR類型,所以可以使用。一般在以下幾種情況下使用Memory儲存引擎:
- 目標資料較小,而且被非常頻繁地訪問。在記憶體中存放資料,所以會造成記憶體的使用,可以通過參數max_heap_table_size控制Memory表的大小,設定此參數,就可以限制Memory表的最大大小。
- 如果資料是臨時的,而且要求必須立即可用,那麼就可以存放在記憶體表中。
- 儲存在Memory表中的資料如果突然丟失,不會對應用服務產生實質的負面影響。
MYISAM和InnoDB儲存引擎只支援BTREE索引;MEMORY和HEAP儲存引擎可以支援HASH和BTREE索引。
B樹索引的優於散列索引的是,可以使用部分查詢和通配查詢,也可以使用<、>和>=等操作符方便資料採礦。散列索引進行“相等比較”非 常快,但是對“範圍比較”的速度就慢多了,因此散列索引值適合使用在=和<>的操作符中,不適合在<或>操作符中,也同樣不適合 用在order by子句中。
【參考】http://www.cnblogs.com/yjf512/archive/2012/02/06/2339496.html
http://www.jb51.net/article/55849.htm
MySQl學習-——Mysql體繫結構與Mysql儲存引擎