色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

如何構建高性能MySQL索引?

李中冰2年前13瀏覽0評論

謝邀~

之前寫過一篇關于針對開發(fā)人員數(shù)據(jù)庫優(yōu)化的文章,索引也是其中之一,那么今天就針對Mysql索引講幾點。

索引的類型及什么時候建立索引

  • 說到MySQL的索引,大多數(shù)時候都是指B-Tree索引,MySQL大部分引擎都是支持B-Tree索引的。B-Tree索引適用于全鍵值、范圍、前綴的查找;

  • 主鍵、外鍵必須有索引,當然很多系統(tǒng)都是邏輯外鍵(或需要經(jīng)常和其他表關聯(lián)),也需要建立索引;經(jīng)常出現(xiàn)在where、orderby、groupby中的字段;盡量把索引建立到小字段上;對于文本字段或者很長字段,不要建索引;復合索引,文章第二部分再說明;

  • 哈希索引,是基于哈希表,精確匹配索引所有列的查詢才有效;只有Memory引擎支持。

  • 全文索引、聚簇索引、聚簇索引等等,就不詳細說了,因為...我也不太會,下面還是主要說B-Tree索引(后來說的索引,都是指B-Tree)。

聯(lián)合索引的限制

很多同學都喜歡給多個字段建立聯(lián)合索引,那么建立聯(lián)合索引需要注意些什么呢:

  • 索引的最左原則,如果不是按索引的最左列查找,那么將無法使用索引。最左原則:如果創(chuàng)建了一個聯(lián)合索引(name,age,gender),相當于創(chuàng)建了三個索引(name)、(name,age)、(name,age,gender)。

  • 聯(lián)合索引,左邊的列有范圍查找,那么右邊的列無法使用索引。比如index(age,gender),whereage>20andgender='M';這時候就會有問題。解決辦法也很簡單,兩個字段分別建立索引。

索引的一些小技巧

  • 前導模糊查詢,會導致索引失效:wherenamelike'%三豐';
  • 數(shù)據(jù)區(qū)分度不大,不建議使用索引:wheregender='M';性別只有男、女、未知三種;
  • 等號左邊有函數(shù),會索引失效:whereLENGTH(col1)=10;
  • 隱式轉換的問題:wherecol2='100',col2列是數(shù)字,等號左右類型不一致,col2會隱式轉換成字符串;
  • 盡量不好使用負向查詢,例如:!=、notin、notexists;
  • 索引不是越多越好。

我將持續(xù)分享Java開發(fā)、架構設計、程序員職業(yè)發(fā)展等方面的見解,希望能得到你的關注。