mysql最大的一個特色是處理和存儲分離,而索引是在存儲層實現的,不一樣的索引因爲其實現的方式不一樣,適應於不一樣的業務處理。mysql
1.B-tree索引,是最多見的一種索引結構(B-tree數據結構網上有不少資料介紹),B-tree索引的索引列是順序組織存儲介質的,因此很適合查找範圍數據;
2.hash索引,基於hash表實現,只有精確匹配索引的全部列的查詢纔有效,對於每一行數據,存儲引擎會對全部的索引列計算一個哈希碼,哈希碼是一個較小的值,不一樣的索引列值計算出來的哈希碼也不一樣,哈希索引將全部的哈希碼存儲在索引介質中,同時在哈希表中保存指向每一個數據行的指針,因此查找速度特別快;
3.全文索引是一種特殊類型的索引,它查找的是文本中的關鍵詞,而不是比較索引中的值;sql
索引的優勢:
1.索引大大減小了服務器須要掃描的數據量;
2.索引能夠幫助服務器避免排序和臨時表;
3.索引能夠將隨機I/0變爲順序I/O;
三星索引
1.查詢對應的索引行相鄰或靠的比較近,則得到一星,這減小了索引片的寬度;
2.索引中的數據順序和查詢的排列順序一致,則得到一星,這減小了沒必要要的排序;
3.索引中的列包含了查詢中須要的所有列,則得到一星,這避免了表訪問,僅經過索引便可獲的全部的數據;
索引是最好的解決方案嗎?
1.對於很是小的表,大部分狀況下全表掃描是更高效的解決方案;
2.對於中到大型表,索引比較高效;
3.對於特大型表,創建和使用索引的代價隨數據量增加服務器