天天看點

MySQL索引深入學習(一)

                    作者:paul                                                                    聯系方式:[email protected]

1.mysql安裝配置細節

怎麼修改字元集?(建議安裝後立即修改)

# 檢視預設的字元編碼(latin1)
show variables like 'character%'
show variables like '%char%'
# 去my.cnf修改(linux下面)
 
# 使用set指令修改(win)
set character_set_server = 'utf8';
           
MySQL索引深入學習(一)

配置檔案:

注意:有時候我們安裝的時候沒有data檔案夾,這時千萬不要去别的版本下面拷貝data檔案夾過來

MySQL索引深入學習(一)

操作方式:

1.以管理者方式打開dos視窗

MySQL索引深入學習(一)

2.進入到mysql安裝的bin目錄下

3.執行指令

mysqld --initialize-insecure --user=mysql
           
MySQL索引深入學習(一)
# 以Myisam主要記住三個檔案
.frm(存儲定義)
.MYD(MYDdata,存儲資料)
.MYI(MYIndex,存儲索引)
# 以Innodb主要記住兩個檔案
.frm(表結構)
.idb(存儲了索引,資料,插入緩存)
           

注注注:當你更新mysql的版本到了5.7,data檔案夾在你的ProgramData\MySQL下面

術語 含義 關鍵字
DDL(Data Definition Languages) 資料庫定義語句 用來建立資料庫中的表、索引、視圖、存儲過程、觸發器等,常用的語句關鍵字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME
DML(Data Manipulation Language) 資料操縱語句 用來查詢、添加、更新、删除等,常用的語句關鍵字有:SELECT,INSERT,UPDATE,DELETE,MERGE,CALL,EXPLAIN PLAN,LOCK TABLE,包括通用性的增删改查
DCL(Data Control Language) 資料控制語句 用于授權/撤銷資料庫及其字段的權限,常用的語句關鍵字有:GRANT,REVOKE。
TCL(Transaction Control Language) 事務控制語句 用于控制事務,常用的語句關鍵字有:COMMIT,ROLLBACK,SAVEPOINT,SET TRANSACTION

2.mysql的邏輯結構

首先看下我們java的調用的順序:

MySQL索引深入學習(一)

當我們來了一個請求,首先去controller層做一些參數的校驗等,然後請求service服務層,再去dao層查詢等操作,最後都得落到db資料庫,那mysql的呢?

MySQL索引深入學習(一)

這裡我們可以類比下,從上至下:

名稱 含義
Connectors 連接配接層(不同的語言和mysql的互動,比如java的jdbc)
Management Serveices & Utilities 系統管理和控制工具(比如備份和容災備份等)
Connection Pool 管理緩沖使用者連接配接,線程處理等需要緩存的需求。 負責監聽對 MySQL Server 的各種請求,接收連接配接請求,轉發所有連接配接請求到線程管理子產品。每一個連接配接上 MySQL Server 的用戶端請求都會被配置設定(或建立)一個連接配接線程為其單獨服務。而連接配接線程的主要工作就是負責 MySQL Server 與用戶端的通信, 接受用戶端的指令請求,傳遞 Server 端的結果資訊等。線程管理子產品則負責管理維護這些連接配接線程。包括線程的建立,線程的 cache 等。
SQL Interface 接受使用者的SQL指令,并且傳回使用者需要查詢的結果。比如select from就是調用SQL Interface。
Parser SQL指令傳遞到解析器的時候會被解析器驗證和解析。解析器是由Lex和YACC實作的,是一個很長的腳本。 在 MySQL中我們習慣将所有 Client 端發送給 Server 端的指令都稱為 query ,在 MySQL Server 裡面,連接配接線程接收到用戶端的一個 Query 後,會直接将該 query 傳遞給專門負責将各種 Query 進行分類然後轉發給各個對應的處理子產品。 主要功能: a . 将SQL語句進行語義和文法的分析,分解成資料結構,然後按照不同的操作類型進行分類,然後做出針對性的轉發到後續步驟,以後SQL語句的傳遞和處理就是基于這個結構的。 b. 如果在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的
Optimizer SQL語句在查詢之前會使用查詢優化器對查詢進行優化。就是優化用戶端請求的 query(sql語句) ,根據用戶端請求的 query 語句,和資料庫中的一些統計資訊,在一系列算法的基礎上進行分析,得出一個最優的政策,告訴後面的程式如何取得這個 query 語句的結果
Cache和Buffer 主要功能是将用戶端送出 給MySQL 的 Select 類 query 請求的傳回結果集 cache 到記憶體中,與該 query 的一個 hash 值 做 一個對應。該 Query 所取資料的基表發生任何資料的變化之後, MySQL 會自動使該 query 的Cache 失效。在讀寫比例非常高的應用系統中, Query Cache 對性能的提高是非常顯著的。當然它對記憶體的消耗也是非常大的。 如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取資料。這個緩存機制是由一系列小緩存組成的。比如表緩存,記錄緩存,key緩存,權限緩存等
存儲引擎接口 存儲引擎接口子產品可以說是 MySQL 資料庫中最有特色的一點了。目前各種資料庫産品中,基本上隻有 MySQL 可以實作其底層資料存儲引擎的插件式管理。這個子產品實際上隻是 一個抽象類,但正是因為它成功地将各種資料處理高度抽象化,才成就了今天 MySQL 可插拔存儲引擎的特色。 從上圖還可以看出,MySQL差別于其他資料庫的最重要的特點就是其插件式的表存儲引擎。MySQL插件式的存儲引擎架構提供了一系列标準的管理和服務支援,這些标準與存儲引擎本身無關,可能是每個資料庫系統本身都必需的,如SQL分析器和優化器等,而存儲引擎是底層實體結構的實作,每個存儲引擎開發者都可以按照自己的意願來進行開發。 注意:存儲引擎是基于表的,而不是資料庫。
最底層 是以的資料都的和硬體結合

我們從上面可以類比到Connectors就是這個連接配接層(Controller),下面的Mysql Server則是是 service層,最底層的File System則類比我們的dao層。

更多内容已上傳公衆号【那條轉彎的路】

MySQL索引深入學習(一)