* 管理緩衝用戶鏈接,線程處理等須要緩存的需求。css
* 負責監聽對 MySQL Server 的各類請求,接收鏈接請求,轉發全部鏈接請求到線程管理模塊。每個鏈接上 MySQL Server 的客戶端請求都會被分配(或建立)一個鏈接線程爲其單獨服務。mysql
* 而鏈接線程的主要工做就是負責 MySQL Server 與客戶端的通訊,接受客戶端的命令請求,傳遞 Server 端的結果信息等。線程管理模塊則負責管理維護這些鏈接線程。包括線程的建立,線程的 cache 等。sql
* SQL命令傳遞到解析器的時候會被解析器驗證和解析。數據庫
主要功能:緩存
a . 將SQL語句進行語義和語法的分析,分解成數據結構,而後按照不一樣的操做類型進行分類,而後作出針對性的轉發到後續步驟,之後SQL語句的傳遞和處理就是基於這個結構的。服務器
b. 若是在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的數據結構
* SQL語句在查詢以前會使用查詢優化器對查詢進行優化。架構
* 它使用的是「選取-投影-聯接」策略進行查詢。ide
用一個例子就能夠理解: select uid,name from user where gender = 1;性能
* 這個select 查詢先根據where 語句進行選取,而不是先將表所有查詢出來之後再進行過濾
* 這個select查詢先根據uid和name進行屬性投影,而不是將屬性所有取出之後再進行過濾
* 將這兩個查詢條件聯接起來生成最終查詢結果
他的主要功能是將客戶端提交給MySQL的 select請求的返回結果集 cache 到內存中,與該 query 的一個 hash 值 作一個對應。該 Query 所取數據的基表發生任何數據的變化以後, MySQL 會自動使該 query 的Cache 失效。在讀寫比例很是高的應用系統中, Query Cache 對性能的提升是很是顯著的。固然它對內存的消耗也是很是大的。
若是查詢緩存有命中的查詢結果,查詢語句就能夠直接去查詢緩存中取數據。這個緩存機制是由一系列小緩存組成的。好比表緩存,記錄緩存,key緩存,權限緩存等
存儲引擎接口模塊能夠說是 MySQL 數據庫中最有特點的一點了。目前各類數據庫產品中,基本上只有 MySQL 能夠實現其底層數據存儲引擎的插件式管理。這個模塊實際上只是 一個抽象類,但正是由於它成功地將各類數據處理高度抽象化,才成就了今天 MySQL 可插拔存儲引擎的特點。
注意:存儲引擎是基於表的,而不是數據庫。
* 多存儲引擎是mysql有別於其餘數據庫的一大特性;
* 存儲引擎是針對表的
* MySQL 5.5以後,默認的存儲引擎由MyISAM變爲InnoDB。
* MySQL引擎: 能夠理解爲,MySQL的「文件系統」,只不過功能更增強大。
* MySQL引擎功能: 除了能夠提供基本的存取功能,還有更多功能事務功能、鎖定、備份和恢復、優化以及特殊功能。
* 查看存儲引擎:show engines;
|
Innodb |
Myisam |
存儲文件 |
.frm 表定義文件 .ibd 數據文件 |
.frm 表定義文件 .myd數據文件 .myi 索引文件 |
鎖 |
表鎖、行鎖 |
表鎖 |
事務 |
ACID |
不支持 |
CRDU |
讀、寫 |
讀多 |
count |
掃表 |
專門存儲的地方 |
索引結構 |
B+ Tree |
B+ Tree |
MySQL經過日誌記錄了數據庫操做信息和錯誤信息。經常使用的日誌文件包括錯誤日誌、二進制日誌、查詢日誌、慢查詢日誌和 InnoDB 引擎在線 Redo 日誌、中繼日誌等。
錯誤日誌(error log):記錄mysql服務器mysqld在啓動/關閉或運行過程當中遇到的錯誤信息。(默認是開啓的,並且從5.5.7之後沒法關閉錯誤日誌)
查詢日誌(query log):
普通查詢日誌(general query log):記錄客戶端鏈接信息和執行的sql語句信息。(默認狀況下通用查詢日誌是關閉的。)
慢查詢日誌(slow query log):記錄執行時間超出指定值(long_query_time)的sql語句。(默認是關閉的。須要經過設置:slow_query_log=ON進行開啓。)
二進制日誌(binary log):記錄數據被修改的相關信息。(默認是關閉的,須要經過配置:log-bin=mysql-bin進行開啓)
在配置文件中進行配置各日誌路徑
查看MySQL數據文件:SHOW VARIABLES LIKE ‘%datadir%’;
l .frm文件:主要存放與表相關的數據信息,主要包括表結構的定義信息
l .ibd和.ibdata文件:用來存儲InnoDB存儲引擎的表數據和索引信息
l .myd文件:主要用來存儲使用MyISAM存儲引擎的表數據信息。
l .myi文件:主要用來存儲使用MyISAM存儲引擎的表數據文件中任何索引的數據樹。
通常狀況下,在沒有創建索引的時候,mysql須要掃描全表及掃描10W條數據找這條數據,若是我在nickname上創建索引,那麼mysql只須要掃描一行數據及爲咱們找到這條nickname='css'的數據,是否是感受性能提高了好多咧....
mysql的索引分爲單列索引(主鍵索引,惟一索引,普通索引)和組合索引.
單列索引:一個索引只包含一個列,一個表能夠有多個單列索引.
組合索引:一個組合索引包含兩個或兩個以上的列,
1. 普通索引,這個是最基本的索引
其sql格式是 :
CREATE INDEX IndexName ON `TableName`(`字段名`(length))
或者
ALTER TABLE TableName ADD INDEX IndexName(`字段名`(length))
2. 惟一索引,與普通索引相似,可是不一樣的是惟一索引要求全部的類的值是惟一的,這一點和主鍵索引同樣.可是他容許有空值,
其sql格式是 :
CREATE UNIQUE INDEX IndexName ON `TableName`(`字段名`(length));
或者
ALTER TABLE TableName ADD UNIQUE (column_list)
3. 主鍵索引,不容許有空值,(在B+TREE中的InnoDB引擎中,主鍵索引發到了相當重要的地位)
主鍵索引創建的規則是 int優於varchar,通常在建表的時候建立,最好是與表的其餘字段不相關的列或者是業務不相關的列.通常會設爲 int 並且是 AUTO_INCREMENT自增類型的
一個表中含有多個單列索引不表明是組合索引,通俗一點講 組合索引是:包含多個字段可是隻有索引名稱
其sql格式是 :
CREATE INDEX IndexName On `TableName`(`字段名`(length),`字段名`(length),...);
刪除索引的mysql格式 :
DORP INDEX IndexName ON `TableName`;