Mysql 索引使用及優化

2021-10-04 05:33:34 字數 881 閱讀 4918

索引:【排好序的快讀查詢資料結構】在資料之外,資料庫還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引;

索引分類

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

復合索引:乙個索引包含多個列

唯一索引:索引列的值必須唯一,但允許有空值;

【初始化介紹】

一棵b樹,淺藍色的塊我們稱之為磁碟塊,可以看到每個磁碟塊包含幾個資料項(深藍色所示)和指標(黃色所示),如磁碟塊1包含資料項17和35,包含指標p1,p2,p3

p1表示小於17的磁碟塊,p2表示17和35之間的磁碟塊,p3表示大於35的磁碟塊。

真實的資料存在於葉子節點即3,5,9,10,13…

非葉子節點不儲存真實的資料,只儲存指引搜尋方向的資料項,如17,35並不真實存在於資料表中

【查詢過程】

如果要查詢資料項29,那麼首先會把磁碟塊1由磁碟載入到記憶體。此時發生一次io,在記憶體中用二分查詢確定29在17和35之間,鎖定磁碟塊1的p2指標,記憶體時間會非常短(相比磁碟io)可以忽略不記。通過磁碟1的p2指標的磁碟位址把磁碟塊3由磁碟載入到記憶體,發生第二次io,29在26和30之間,鎖定磁碟塊3的p2指標,通過指標載入磁碟塊8到記憶體,發生第三次io,同時記憶體中做二分查詢。找到29,結束查詢,總計三次io。

適合建立索引的情況

不適合建立索引的情況

【explain】

Mysql 索引及優化

索引是什麼?相信大家都用過字典。你是怎麼從厚厚的新華字典中找到你需要找到的那個字的呢?又是怎麼從一本書中快速定位到你需要的章節?我們都是通過書中的目錄,然後根據目錄中的頁碼定位到我們要的資訊。同樣在mysql中也是這樣為我們準備了乙份目錄。當你去通過sql語句查詢的時候用不用索引,以及怎麼用索引。決...

mysql索引及優化

mysql的索引可以從不同的維度來進行區分,如下 這是最基本的索引型別,基於普通字段建立的索引,沒有任何限制。與 普通索引 類似,不同的就是 索引欄位的值必須唯一,但允許有空值 在建立或修改表時追加唯一 約束,就會自動建立對應的唯一索引。它是一種特殊的唯一索引,不允許有空值。在建立或修改表時追加主鍵...

mysql索引的使用及語句優化

一 mysql裡目前只支援4種索引分別是 b tree,full text,hash以及r tree索引 b tree索引應該是mysql裡最廣泛的索引的了,除了archive,基本所有的儲存引擎都支援它.1.b tree在myisam裡的形式和innodb稍有不同 在innodb裡面有兩種形態 其...