mysql,簡單介紹一下索引


漢字很多,人力有時盡,人不可能記住所有的字,為了解決這個問題,於是有了字典。數據庫里的數據很多,為了方便檢索,於是有了索引。

索引,是一種數據結構,在這種數據結構中實現了高級的查找算法,索引可以幫助我們高效地獲取數據,提高查詢效率。

 

既然索引有這樣的好處,那我們是不是每個字段都該建立索引呢?

當然是不,物極必反,索引是需要占用空間的,而且索引本身也不小,不能存儲在內存空間,是存放在磁盤中的。

如果每個字段都建立索引,后果可想而知。

 

討論索引的時候,如果沒有特別的指明類型,一般都是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;
這種情況也不允許使用索引哦。
復合索引是遵循向左原則的,只要在查詢的時候,是按照復合索引從左到右的順序依次查詢
不管查詢條件是否完全滿足所有的符合索引的列,都可以使用部分的符合索引;

 

選擇哪些列創建索引?

1.查詢較為頻繁的字段應該創建索引;
2.唯一性太差的字段不應該創建索引,就算這個字段經常作為查詢條件;
3.更新頻繁的字段不應該創建索引,索引是需要維護成本的;
4.有where條件時才會走索引,所以如果這個列不會作為where的查詢條件,沒有必要為這個字段創建索引;
 

不走索引的情況

在以前的工作中,有一次發現在特殊的情況下,即使你創建了索引,並且也在where加上了索引條件,查詢過程中還是沒有走索引。例如:
1.使用不等於(!= 或者<>)的時候MySQL 無法使用索引
2.like 后面的字符當首位為通配符時不走索引;如
   like "北%",這種情況是走索引的
   like "%北",這種情況是不走索引的
3.索引字段 is null 不走索引;
4.索引字段前加了函數或參加了運算不走索引;
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM