Mysql中索引知識複習 1000萬數據查詢

1.索引的作用

索引就是想是書的目錄,能夠幫助快速查詢。如果數據庫沒有索引的話,在查詢的時候,就會進行全表掃描,在數據量大的情況下(幾百萬,上千萬)的時候,查詢會特別慢需要幾秒,這個在線上系統是無法滿足應用要求的。加上索引後查詢只要幾十毫秒,百倍的優化

索引建立的原則

用於索引的最好的備選數據列是那些出現在WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。

大家看看ibatis/mybatis裡 where後面條件是什麼吧,優先考慮把他們創建成索引。

2. 索引的類型

我前面文章簡單分析了,基本的索引情況,大家可以看這裡,傳送門

  1. 主鍵索引:索引的順序就是物理存儲的順序【1步就能定位到數據,非常快】;
  2. 普通索引:保存了數據存放的指針,然後再根據指針地址獲取數據【分2步來查找數據】;
  3. 組合(聯合)索引:用於多字段組合查詢,最左前綴原則,組合、聯合、多列索引都是同一個不同說法而已。
  4. 唯一約束:可以在數據庫系統上保證數據上唯一約束,可以解決了多併發情況容易出現一些髒數據【先查在判斷是否有數據在插入情況】 ,可以保證數據冪等。

最左前綴原則 【面試也考】

顧名思義,就是最左優先

mysql會從左至右匹配,直到遇到範圍查找(> < like between)就停止。

如:

select * from table1 where a=1 and b=2 and c<3 and d=9 ;

建立的聯合索引為:(a,b,c,d) 實際使用的索引為(a,b,c)。因為遇到了c<3就停止了,d列就沒有用上。

聯合索引是有序元組【非常重要】

則mysql實際建的索引為:(a) (a,b) (a,b,c) (a,b,c,d) 【a就是前綴】。

如果你考慮給已經索引過的表添加索引,那麼就要考慮你將增加的索引是否是已有的多列索引的最左前綴【聯合索引】。

如果是這樣的,不用增加索引,因為已經有了 【小白們切記不要創建冗餘索引】

例子:where b=2 and c=3 and d=9 ;按照最左匹配原則,這個條件就沒法走索引了,首先必須有a

·where後面的 =,in可以亂序,查詢優化器會幫你優化成索引可以識別的形式。也就是說,where b=2 and a=1 and c<3

使用的索引任然為(a,b,c)組合。

注意點

  • 小數據量表,沒必要建索引,這情況全表掃描最快。
  • 選擇性越高的索引價值越大,這是由B+Tree的性質決定的,
    選擇性是指不重複的索引值
  • 在創建組合(聯合)索引時,要根據業務需求,where子句中使用最頻繁的一列放在最左邊。

Mysql索引會失效的幾種情況【面試喜歡問】

Mysql中索引知識複習 1000萬數據查詢

Mysql中索引知識複習 1000萬數據查詢

索引技術還有很多其他注意點,我先分析這麼多

歡迎一起來溝通

Mysql中索引知識複習 1000萬數據查詢

Mysql中索引知識複習 1000萬數據查詢

Mysql中索引知識複習 1000萬數據查詢


分享到:


相關文章: