mysql組合索引順序參考


問題背景 : 

當我們需要創建一個組合索引, 索引的順序對於效率影響很大, 怎么確定索引的順序;

解決方法 : 

我們應該依據字段的全局基數和選擇性, 而不是字段的某個具體的值來確定;

 

表結構 : 

dc_listing

 

代碼 : 

SELECT
  COUNT(DISTINCT accountId) / COUNT(*) AS accountId_sel,
  COUNT(DISTINCT userName) / COUNT(*) AS userName_sel,
  COUNT(*)
FROM
  dc_listing

 

結果: 

 

可以看到accountId的選擇性更高, 所以我們應該講accountId這個字段放在組合索引前面

 

存在問題 : 

對於一些特殊的值, 比如超級用戶, 如果他滿足大部分的查詢條件, 即這個基數對這個值可以說是無效的參考.

避免這種問題, 只能從代碼層面屏蔽, 區分這類數據合組, 禁止針對這類值進行這個查詢;

參考 msyql高性能 5.3.4 章節, 有更詳細例子

 


免責聲明!

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



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