一.mysql體系結構和存儲引擎
1.1、數據庫和實例的區別
數據庫:物理操作系統或其他形式文件類型的集合。在mysql下數據庫文件可以是frm,myd,myi,ibd結尾的文件。
數據庫實例:由數據庫后臺進程/線程以及一個共享內存區組成。數據庫實例才是真正用來操作數據庫文件的。
mysql數據庫是單進程多線程的程序,與sql server比較類似。也就是說,Mysql數據庫實例在系統上的表現就是一個進程。
1.2、mysql的體系結構

mysql由連接池組件、管理服務和工具組件、sql接口組建、查詢分析器組件、優化器組件、緩存組件、插件是存儲引擎、物理文件。
1.3、mysql存儲引擎
1.3.1、innodb存儲引擎,特點支持外鍵、行鎖、非鎖定讀(默認情況下讀取不會產生鎖)、mysql-4.1開始支持每個innodb引擎的表單獨放到一個表空間里。innodb通過使用MVCC來獲取高并發性,并且實現sql標準的4種隔離級別,同時使用一種被稱成next-key locking的策略來避免換讀(phantom)現象。除此之外innodb引擎還提供了插入緩存(insert buffer)、二次寫(double write)、自適應哈西索引(adaptive hash index)、預讀(read ahead)等高性能技術。
1.3.2、myisam存儲引擎,myisam特點是不支持事物,適合olap應用,myisam表由MYD和MYI組成。mysql-5.0版本之前,myisam默認支持的表大小為4G,從mysql-5.0以后,myisam默認支持256T的表單數據。myisam只緩存索引數據。
1.3.3、NDB存儲引擎,特點是數據放在內存中,mysql-5.1版本開始可以將非索引數據放到磁盤上。NDB之前的缺陷是join查詢是mysql數據庫層完成的,而不是存儲引擎完成的,復雜的join查詢需要巨大的網絡開銷,速度很慢。當前mysql cluster7.2版本中已經解決此問題,join查詢效率提高了70倍。
1.3.4、memeory存儲引擎,將數據放到內存中,默認使用hash索引,不支持text和blob類型,varchara是按照char的方式來存儲的。mysql數據庫使用memory存儲引擎作為臨時表還存儲中間結果集(intermediate result),如果中間集結果大于memorg表的容量設置,又或者中間結果集包含text和blog列類型字段,則mysql會把他們轉換到myisam存儲引擎表而放到磁盤上,會對查詢產生性能影響。
1.3.5、archive存儲引擎,壓縮能力較強,主要用于歸檔存儲。
1.3.6、federated存儲引擎,不存儲數據,他指向一臺遠程mysql數據庫上的表。
1.3.7、maria存儲引擎,myisam的后續版本,支持緩存數據和索引,行鎖設計,支持mvcc,支持事務和非事務安全的選項,以及更好的BLOG字符類型的處理性能。
1.3.8、其他存儲引擎,sphinx用于全文索引,infobright用于數據倉庫。
1.4連接Mysql
1.4.1、TCP/IP:基于網絡的連接,連接進行權限檢查。
新聞熱點
疑難解答