五、MYSQL的索引

來源:互聯網
上載者:User

標籤:rom   data   inno   訪問   uid   lex   alt   包含   bubuko   

對於建立的索引(姓,名字,data)

5.1、索引對一下的查詢類型有效

  1、全值匹配:能尋找姓+名為ALLEN、出生日期為1990-11-05的人;

  2、最左首碼匹配:可以尋找姓為ALLEN的人;即只使用索引的第一列;

  3、列首碼匹配:可以尋找姓為J開頭的人;這裡索引也只使用了第一列;

  4、範圍匹配:可以尋找姓以開頭為A-J的人;這裡索引也只使用了第一列;

  5、精確匹配前一列,範圍匹配後一列;

  6、只訪問索引的查詢;

  7、ORDER BY 也滿足索引;

 

5.2、索引的限制

  1、沒法找到特定名字的人;

  2、沒法找到以某個J結尾的姓;

  3、沒法跳過索引,即沒有姓A,出生日期為XX的人;

  4、範圍查詢的右邊索引失效,例如姓為AX,名字like b% ,出生日期為199-01-01的人,只使用了前兩列索引;

 

 

5.3 高效能索引策略

  1、獨立的列,以下SQL失效:selext * from user where id +1 = 10;

  2、選擇合適的索引列,

  3、聚族索引與非聚族索引(innoDB和myisam引擎的區別)

  盡量使用自增主鍵而不是uuid,因為這樣會導致資料沒有了聚集屬性;

 

  4、索引覆蓋-如果查詢條件中已經包含了要查詢的值,那麼對於聚族索引而言,就不需要進行二次回查;

    例如table 有 (id,name)的聯合索引,當sql=select id ,name from table 時,就會觸發索引覆蓋;

  5、多表JOIN時,只有第一個表的ordery by條件能使用索引;

  關於order by 的生效和失效條件

  對於table有聯合唯一索引(a,b,c)

以下索引生效:

  where a= x order by b;能使用索引,因為a是常量,而a+b組成的最左首碼索引;

  where a >x order by a,b;能使用索引,因為a+b組成了聯合索引;

 

以下索引失效:

  where a = x order by b desc,c desc ,因為兩個不同的排序方向,但是索引列都是正序排序;

  where a =x order by b ,d 使用了一個不在索引中的列;

  where a =x ordery c ,a+c沒法組合最左首碼組合;

  where a > x order by  b,c ;失效,a使用了範圍查詢條件,b,c組合失效;

 

   6、使用In sex來不選擇性別,讓範圍查詢的欄位(例如age)排到最後;

 

  

 

    

 

五、MYSQL的索引

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.