mysql索引框架 MySQL架構和MySQL索引

2021-10-18 23:48:27 字數 3488 閱讀 9074

1.mysql架構

1.1邏輯架構圖

1.1.1connection pool:連線池

*管理緩衝使用者連線,執行緒處理等需要快取的需求。

*負責監聽對mysql server的各種請求,接收連線請求,**所有連線請求到執行緒管理模組。每乙個連線上mysql server的客戶端請求都會被分配(或建立)乙個連線線程為其單獨服務。

*而連線線程的主要工作就是負責mysql server與客戶端的通訊,接受客戶端的命令請求,傳遞server端的結果資訊等。執行緒管理模組則負責管理維護這些連線線程。包括執行緒的建立,執行緒的cache等。

1.1.2parser:解析器

* sql命令傳遞到解析器的時候會被解析器驗證和解析。

主要功能:

a .將sql語句進行語義和語法的分析,分解成資料結構,然後按照不同的操作型別進行分類,然後做出針對性的**到後續步驟,以後sql語句的傳遞和處理就是基於這個結構的。

b.如果在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的

1.1.3optimizer:查詢優化器

* sql語句在查詢之前會使用查詢優化器對查詢進行優化。

*它使用的是「選取-投影-聯接」策略進行查詢。

用乙個例子就可以理解:select uid,name from user where gender = 1;

*這個select查詢先根據where語句進行選取,而不是先將表全部查詢出來以後再進行過濾

*這個select查詢先根據uid和name進行屬性投影,而不是將屬性全部取出以後再進行過濾

*將這兩個查詢條件聯接起來生成最終查詢結果

1.1.4cache和buffer: 查詢快取

他的主要功能是將客戶端提交給mysql的select請求的返回結果集cache到記憶體中,與該query的乙個hash值 做乙個對應。該query所取資料的基表發生任何資料的變化之後,mysql會自動使該query的cache失效。在讀寫比例非常高的應用系統中,query cache對效能的提高是非常顯著的。當然它對記憶體的消耗也是非常大的。

如果查詢快取有命中的查詢結果,查詢語句就可以直接去查詢快取中取資料。這個快取機制是由一系列小快取組成的。比如表快取,記錄快取,key快取,許可權快取等

1.1.5儲存引擎介面

儲存引擎介面模組可以說是mysql資料庫中最有特色的一點了。目前各種資料庫產品中,基本上只有mysql可以實現其底層資料儲存引擎的外掛程式式管理。這個模組實際上只是 乙個抽象類,但正是因為它成功地將各種資料處理高度抽象化,才成就了今天mysql可插拔儲存引擎的特色。

注意:儲存引擎是基於表的,而不是資料庫。

1.2mysql的儲存引擎

*多儲存引擎是mysql有別於其他資料庫的一大特性;

*儲存引擎是針對表的

* mysql 5.5之後,預設的儲存引擎由myisam變為innodb。

* mysql引擎: 可以理解為,mysql的「檔案系統」,只不過功能更加強大。

*檢視儲存引擎:show engines;

innodb

myisam

儲存檔案

.frm表定義檔案

.ibd資料檔案

.frm表定義檔案

.myd資料檔案.myi索引檔案

鎖表鎖、行鎖

表鎖事務

acid

不支援crdu

讀、寫讀多

count

掃表專門儲存的地方

索引結構

b+ tree

b+ tree

1.3mysql物理結構

1.3.1日誌檔案

錯誤日誌(error log):記錄mysql伺服器mysqld在啟動/關閉或執行過程中遇到的錯誤資訊。(預設是開啟的,而且從5.5.7以後無法關閉錯誤日誌)

查詢日誌(query log):

普通查詢日誌(general query log):記錄客戶端連線資訊和執行的sql語句資訊。(預設情況下通用查詢日誌是關閉的。)

慢查詢日誌(slow query log):記錄執行時間超出指定值(long_query_time)的sql語句。(預設是關閉的。需要通過設定:slow_query_log=on進行開啟。)

在配置檔案中進行配置各日誌路徑

1.3.2資料檔案

檢視mysql資料檔案:show variables like 『%datadir%』;

l.ibd和.ibdata檔案:用來儲存innodb儲存引擎的表資料和索引資訊

l.myd檔案:主要用來儲存使用myisam儲存引擎的表資料資訊。

l.myi檔案:主要用來儲存使用myisam儲存引擎的表資料檔案中任何索引的資料樹。

2.mysql索引

一般情況下,在沒有建立索引的時候,mysql需要掃瞄全表及掃瞄10w條資料找這條資料,如果我在nickname上建立索引,那麼mysql只需要掃瞄一行資料及為我們找到這條nickname='css'的資料,是不是感覺效能提公升了好多咧....

mysql的索引分為單列索引(主鍵索引,唯一索引,普通索引)和組合索引.

單列索引:乙個索引只包含乙個列,乙個表可以有多個單列索引.

組合索引:乙個組合索引包含兩個或兩個以上的列,

2.1索引的建立

2.1.1單列索引

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自增型別的

2.1.2組合索引

乙個表中含有多個單列索引不代表是組合索引,通俗一點講 組合索引是:包含多個字段但是只有索引名稱

其sql格式是:

create index indexname on `tablename`(`欄位名`(length),`欄位名`(length),...);

2.2索引的刪除

刪除索引的mysql格式:

dorp index indexname on `tablename`;

mysql詢問框架 mysql學習之 邏輯架構

mysql邏輯架構圖 第一層,服務層 為客戶端服務 為請求做連線處理,授權認證,安全等。1.每個連線的查詢都在乙個程序中的執行緒完成。2.伺服器負責快取執行緒,所以服務層不需要為每個連線新建執行緒。注 mysql5.5或者更新的版本提供了乙個api,支援執行緒池 thread pooling 外掛程...

mysql 索引 手冊 MySQL 索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...

mysql非同步索引 MySQL索引

一 為什麼要使用索引 優化查詢,減少掃瞄的錶行數。打個比方,索引的作用就和查新華字典,字典的索引的作用的一樣的。二 索引的型別 1 索引是在儲存引擎中實現的,而不是在伺服器層中實現的。所以,每種儲存引擎的索引都不一定完全相同,並不是所有的儲存引擎都支援所有的索引型別。2 如果使用的是組合索引 即有多...