mysql,簡單介紹一下索引
阿新 • • 發佈:2018-12-17
漢字很多,人力有時盡,人不可能記住所有的字,為了解決這個問題,於是有了字典。資料庫裡的資料很多,為了方便檢索,於是有了索引。
索引,是一種資料結構,在這種資料結構中實現了高階的查詢演算法,索引可以幫助我們高效地獲取資料,提高查詢效率。
既然索引有這樣的好處,那我們是不是每個欄位都該建立索引呢?
當然是不,物極必反,索引是需要佔用空間的,而且索引本身也不小,不能儲存在記憶體空間,是存放在磁碟中的。
如果每個欄位都建立索引,後果可想而知。
討論索引的時候,如果沒有特別的指明型別,一般都是B樹索引。BTree索引可以查閱相關資料瞭解下,不贅述了。
除了B樹索引,另外還有雜湊索引等。
索引有哪些分類?
1.單值索引
單值索引是指一個索引只包含一個欄位,一個表可以建立多個單值索引,但也不宜過多。
2.唯一索引
主鍵建立後一定包含一個唯一索引;但唯一索引不一定是主鍵,允許有空值,一個表可以建立多個唯一索引。
3.複合索引
因為一個查詢一次至多隻能使用一個索引,所以,如果都使用單值索引,在資料量較大的情況下,不能很好的區分資料, 於是引入了複合索引。需要注意的是:複合索引是有順序的! 舉例說明一下。
例如,user表裡有id,name,sex三個欄位,並且我們建立了name+sex的複合字段。 select * from user where name=x and sex=x; 這個情況是允許使用上面的複合索引的。 select複合索引是遵循向左原則的,只要在查詢的時候,是按照複合索引從左到右的順序依次查詢 不管查詢條件是否完全滿足所有的符合索引的列,都可以使用部分的符合索引;* from user where name=x; 這個情況也是允許使用上面的複合索引的。 select * from user where sex=x and name=x; 這種情況不允許使用,複合索引有順序就是指這個意思。 select * from user where sex=x; 這種情況也不允許使用索引哦。