mysql索引總結

2021-10-07 04:21:23 字數 962 閱讀 4997

索引是為了高效獲取資料排好序的資料結構

如果沒有索引,那麼你是通過全表查詢查詢資料的,因為資料分散在磁碟的各個地方,所以會沒有順序的查很多次,而且每次查詢都是一次磁碟io互動,可想而知資料越來越多,查詢速度會越來越慢。

如圖所示,通過排好序的資料結構,獲取資料會更高效。

當然索引底層並不是二叉樹,這裡只是大致做個形象的對比。為什麼資料結構不用二叉樹呢?因為二叉樹在index一直遞增的情況下,由於後面乙個總是比前面的大,資料是單邊查詢的,效率也不高。

如上所述,二叉樹容易單邊遞增,所以需要使用平衡樹,但是平衡樹的深度依舊太深,影響效率。所以我們改用b樹的優化版本:b+樹,b+樹相比b樹,為了放更多的索引index,它的非葉節點不存放data(存放的磁碟位址),轉而放在葉節點。

如圖,中間是冗餘索引,最下面葉節點用指標連線,提高區間訪問效能,最大能放2000萬左右的索引元素。所以即使你是一張兩千萬資料的表,你也可以用b+樹的資料結構建好索引,然後你再查詢資料,效率就會很高。並且根節點往往是長期放在記憶體中,冗餘索引則是放在快取中。

1、它的index與data都在葉節點,這種型別的也被成為聚集索引。

2、innodb表必須要有主鍵,如果沒有建立,mysql也會選擇沒有重複的列作為主鍵(從左到右的順序),如果都是重複的列,也會生成乙個rowid作為主鍵。

3、推薦使用整型的自增主鍵,因為string型別的比較影響效率,如果不是自增主鍵,那麼index中間插入,會導致節點**和重新平衡,影響效率。

最經典的就是要符合最左字首原則,如圖,如果sql的where條件後面沒有第乙個字段,那麼第乙個欄位就沒有過濾,相當於全表查詢,自然就沒有走索引了。

附:資料結構互動學習**

mysql 索引總結 mysql索引總結

mysql中每乙個表都有乙個聚簇索引clusted index,該所索引是預設建立的,除此之外的表上的每乙個非聚簇索引都是二級索引,又叫輔助索引 secondary indexes 以innodb來說,每個innodb表具有乙個特殊的索引稱為聚集索引,如果您的表上定義有主鍵,該主鍵索引是聚集索引,如...

mysql次級索引 MySQL 索引總結

1 索引是做什麼的?想象一下,你面前有本詞典,資料就是書的正文內容,你就是那個cpu,而索引,則是書的目錄 索引用於快速找出在某個列中有一特定值的行。不使用索引,mysql必須從第1條記錄開始然後讀完整個表直到找出相關的行。表越大,花費的時間越多。如果表中查詢的列有乙個索引,mysql能快速到達乙個...

mysql 索引總結

索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄即可迅速得到...