引言mysql
做爲一名web程序員,和數據庫打交道是必不可少的,爲了優化查詢的效率,咱們最常想到的方法應該就是添加索引了,爲了可以更好的使用索引,咱們應該對它多作一些瞭解。程序員
索引是什麼web
數據庫對象的索引其實和書的目錄很相似,它的目的就是爲了提升從表中檢索字段的速度。
實現原理是特定字段先執行一次排序,而後每次須要指定數據前,先對從索引中查詢,由於索引是特殊的數據結構,因此查詢速度很是快。
索引類型
常見的索引類型有三種,全文索引,惟一索引,普通索引.sql
索引方法
在mysql數據中,經常使用的索引方法有B-Tree索引,哈希索引
哈希索引,是把使用哈希函數,映射到哈希表上,這種查找數據的方式空間複雜度是O(n),時間複雜度是O(1);
可是哈希索引只能對某一特定數據進行查找,沒有辦法查詢到某一數據段集合所須要的數據。(ps:innoDB與MyISAM不支持hash索引,因此通常直接選擇B樹索引便可)
B-Tree索引,要想了解B-Tree索引,那麼首先你就不得不瞭解B-Tree這種數據結構,它是一種多路平衡搜索樹,能夠對區間進行查找,在B-Tree中,全部的數據都保存在葉節點,進行區間查找的時候,首先找到區間最小值,而後找到最大值,在這之間全部的數據即爲查找的數據
什麼狀況下用什麼索引數據庫
常常查詢的字段,或者說老是在where字句中出現
order by或者group by的字段
主鍵或者外鍵
惟一完整性約束等
選擇合適的索引方法數據結構
選擇索引的時候,索引類型對應數據的特性,而索引方法則對應查找的方法,若是沒有創建正確的索引,那麼還不如不創建索引,其實大多數狀況下,選擇普通索引方法便可,可是存在某些特殊的狀況,咱們須要特定的索引
好比說惟一索引,惟一索引或者說更多的是一種約束,當某一字段具備惟一性質時,選擇惟一索引,如主鍵和外鍵等。
若是某字段數據比較大,如保存的是某一篇博客的內容,而且改動較少,那麼能夠創建全文索引,全文索引比較消耗內存空間
尾語函數
索引是一種優化查詢效率的方法,可是請不要濫用,濫用索引真的還不如不用索引。
優化