MySQL聯合索引

來源:互聯網
上載者:User

標籤:好處   更新   title   分享   應該   技術   net   想去   問題   

  1. 在一次查詢中,MySQL只能使用一個索引。
  2. 在真實項目中,SQL語句中的WHERE子句裡通常會包含多個查詢條件還會有排序、分組等。
  3. 若表中索引過多,會影響INSERT及UPDATE效能,簡單說就是會影響資料寫入效能。因為更新資料的同時,也要同時更新索引。
  4. 最實際的好處當然是查詢速度快,效能好。

 

使用聯合索引應該注意:

  1. MySQL使用聯合索引只能使用左側的部分,例如INDEX(a,b,c),當條件為a或a,b或a,b,c時都可以使用索引,但是當條件為b,c時將不會使用索引。這好比一本先根據姓,再根據名進行排序的電話簿,當尋找的時候有姓的條件,效率會比沒有任何條件高;如果在姓的基礎上還有名的條件,效率會更高;但若只有名的條件,電話簿將不起作用。

 

  1.     離散度更高的索引應該放在聯合索引的前面,因為離散度高索引的可選擇性高。考慮一種極端的情況,資料表中有100條記錄,若INDEX(a,b)中a只有兩種情況,而b有100種情況。這樣對於查詢唯一記錄a = …,b = …時,先遍曆全部索引看滿足a條件的有50個索引節點,接下來還要再一個個遍曆這50個索引節點。如果是INDEX(b,a),先遍曆全部索引發現滿足b條件的索引節點只有一個,再遍曆這個節點發現也滿足a條件。雖然最後都能找到那個唯一的索引節點,但是第二種索引順序對引擎遍曆索引效率有很大的提高(用電話薄的思想去思考問題)。
  2. 查看列的離散程度:select count(distinct customer_id),count(distinct staff_id) from payment;

customer_id列的離散程度更高,建聯合索引時應該INDEX(customer_id,staff_id);

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.