這是我參與8月更文挑戰的第7天,活動詳情查看:8月更文挑戰數據庫
索引的出現是爲了提升數據的查詢效率,就像書的目錄同樣。一本500頁的書,若是你想快速找到其中的某一個知識點,在不借助目錄的狀況下,那我估計你可得找一下子。一樣,對於數據庫的表而言,索引其實就是它的「目錄」。markdown
一樣索引也會帶來不少負面影響:建立索引和維護索引須要耗費時間,這個時間隨着數據量的增長而增長;索引須要佔用物理空間,不光是表須要佔用數據空間,每一個索引也須要佔用物理空間;當對錶進行增、刪、改、的時候索引也要動態維護,這樣就下降了數據的維護速度。數據結構
索引的數據結構和具體存儲引擎的實現有關,,在MySQL中使用較多的索引有 Hash 索引、B+樹索引等。而咱們常常使用的 InnoDB 存儲引擎的默認索引實現爲 B+ 樹索引。post
用 B+ 樹不用 B 樹考慮的是 IO 對性能的影響,B 樹的每一個節點都存儲數據,而 B+ 樹只有葉子節點才存儲數據,因此查找相同數據量的狀況下,B 樹的高度更高,IO 更頻繁。數據庫索引是存儲在磁盤上的,當數據量大時,就不能把整個索引所有加載到內存了,只能逐一加載每個磁盤頁(對應索引樹的節點)。性能