一、什么是索引
????????在關系數據庫中,索引是一種單獨的、物理的對數據庫表中一列或多列的值進行排序的一種存儲結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。索引的作用相當于圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。
????????能實現快速定位數據的一種存儲結構,其設計思想是以空間換時間
二、索引的分類
按 [ 數據結構 ] 分類:B+tree索引、Hash索引、Full-text索引。
按 [ 物理存儲 ] 分類:索引 (主鍵索引) 、二級索引(輔助索引)。
按 [ 字段特性 ] 分類:主鍵索引、唯一索引、普通索引、前綴索引。
按 [ 字段個數 ] 分類:單列索引、聯合索引。??
三、MySQL如何實現的索引機制
在MySQL 中有不同的存儲引擎比如像 InnoDB MyISAM Memory 等等每一種存儲引擎在其內部實現索引機制的原理也有所不同。
在 MySQL5.5 之后默認的就是 InnoDB,并且是目前使用最廣泛的MySQL數據引擎,以 InnoDB為例。
1. 如果說在表中有100條數據,而要找出所需要的數據,有哪些辦法?
- (不推薦)按照一種順序的方式一條一條往下去搜索,直到匹配到需要的數據,這是一種方案在時間復雜度上是0(N),雖說效率差但也能用。
- (不推薦)二分查找法也是一種常用的比較高效的查詢算法,它的搜索效率為 0(log(N)),雖說查找效率是比順序查找高了不少,但是它有兩個前提條件,必須用順序存儲結構比如數組,第二個是必須按照關鍵字進行有序排序(從小到大)。
- (不推薦)哈希查找,哈希查找的特性是能夠做到直接定址,其效率無限接近于 0(1),取決于沖突的數量。但是散列表數據是無序存儲的,排序要自己做,第二個是散列表還要擴容耗時長,遇到散列沖突性能不穩定。
- (推薦)B樹/B+樹查找的復雜度是 0(log2(N)),那么這也是InnoDB 采用的數據結構,在查找效率上的非常高的。
?B+Tree
平衡二叉樹
B+ tree