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