mysql索引優化

2022-02-17 14:17:58 字數 1271 閱讀 1664

1. 百萬級的資料

查詢資料: 意味著對磁碟進行頻繁的操作,索引的目的就是減少操作的次數。來提高查詢的效率。

不加索引: 對磁碟進行百萬次的io操作

加索引: 將排好序的資料放在資料結構裡

舉例; select * from tab where colname = 89

(不加索引就得是全表查詢)

加索引:

索引結構:

二叉樹;

22       89

5 23      77 91

如果索引的字段是有序的,二叉樹就變成單邊增長的趨勢(io的次數跟沒加索引一樣)。

0x0 col1 col2

引出:紅黑樹

它的特性會使出現自平衡。(左旋轉, 右旋轉, 變色)

會將io的次數降低;

紅黑樹參考:

特性如下:

左旋轉和右旋轉和變色,來保證自平衡:

mysql的索引引擎是innodb,

底層的資料結果是b+樹,b+樹是增強型的多路搜尋樹。

b+樹的磁碟讀寫代價更低

b+樹的內部結點並沒有指向關鍵字具體資訊的指標。因此其內部結點相對b 樹更小。如果把所有同一內部結點的關鍵字存放在同一盤塊中,那麼盤塊所能容納的關鍵字數量也越多。一次性讀入記憶體中的需要查詢的關鍵字也就越多。相對來說io讀寫次數也就降低了。 

舉個例子,假設磁碟中的乙個盤塊容納16bytes,而乙個關鍵字2bytes,乙個關鍵字具體資訊指標2bytes。一棵9階b-tree(乙個結點最多8個關鍵字)的內部結點需要2個盤快。而b+樹內部結點只需要1個盤快。當需要把內部結點讀入記憶體中的時候,b 樹就比b+樹多一次盤塊查詢時間(在磁碟中就是碟片旋轉的時間)。

b+樹的查詢效率更加穩定 

由於非終結點並不是最終指向檔案內容的結點,而只是葉子結點中關鍵字的索引。所以任何關鍵字的查詢必須走一條從根結點到葉子結點的路。所有關鍵字查詢的路徑長度相同,導致每乙個資料的查詢效率相當。

b+樹 

性質:b+樹是b-樹的變體,也是一種多路搜尋樹: 

1.其定義基本與b-樹同,除了:

2.非葉子結點的子樹指標與關鍵字個數相同;

3.非葉子結點的子樹指標p[i],指向關鍵字值屬於[k[i], k[i+1])的子樹(b-樹是開區間);

4.為所有葉子結點增加乙個鏈指標;

5.所有關鍵字都在葉子結點出現;

b-樹 

性質:是一種多路搜尋樹(並不是二叉的)

mysql 優化 聚集索引 mysql 索引優化

一.聚集索引 clustered index innodb預設依據主鍵列聚集,myisam不使用 特點 b樹每個葉子包含實際資料行,資料按照索引順序地儲存在物理頁上。優點 1.範圍查詢,獲取指定id的全部資料只需從磁碟讀取少量資料頁 如果不使用聚集索引,每條資料可能引起一次磁碟io。2.由於索引和資...

mysql索引優化原則 MySQL 索引優化原則

索引優化原則 1 最左字首匹配原則,聯合索引,mysql會從做向右匹配直到遇到範圍查詢 3 and d 4 如果建立 a,b,c,d 順序的索引,d是用不到索引的,如果建立 a,b,d,c 的索引則都可以用到,a,b,d的順序可以任意調整。2 和in可以亂序,比如a 1 and b 2 and c ...

mysql索引優化原則 MySQL索引優化

mysql官方對索引的定義 索引是幫助mysql高效獲取資料的資料結構。索引是在儲存引擎中實現的,所以每種儲存引擎中的索引都不一樣。如myisam和innodb儲存引擎只支援btree索引 memory和heap儲存引擎可以支援hash和btree索引。這裡僅針對常用的innodb儲存引擎所支援的b...