Mysql 建立联合索引时,我这边一般是基数小的排在前面,基数大的排在后面。『如果不对,欢迎指正,谢谢大家!』
今天后辈问起联合索引为何是基数小的排在前面?基数大的排在后面?
想了很久,都不知怎么解释。。。
如果是你,你要怎么向后辈解释联合索引的字段顺序规则呢?
Tip: 网上找了很久,也没找到联合索引字段顺序说明的优质文章。。。
基数越小表示非重复数据少,比如性别只有男和女的话,基数就是 2;再比如月份只有 12 个月,那么基数就是 12,所以性别字段的基数比月份字段的基数小。
Mysql 建立联合索引时,我这边一般是基数小的排在前面,基数大的排在后面。『如果不对,欢迎指正,谢谢大家!』
今天后辈问起联合索引为何是基数小的排在前面?基数大的排在后面?
想了很久,都不知怎么解释。。。
如果是你,你要怎么向后辈解释联合索引的字段顺序规则呢?
Tip: 网上找了很久,也没找到联合索引字段顺序说明的优质文章。。。
基数越小表示非重复数据少,比如性别只有男和女的话,基数就是 2;再比如月份只有 12 个月,那么基数就是 12,所以性别字段的基数比月份字段的基数小。
5 回答3.3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.8k 阅读
3 回答2k 阅读
联合索引的顺序,难道不是哪个查询条件最多用就放在前面的吗?
比如商品有三个分类A,B,C,类似「界门纲目科属种」那样,越左类别越大。还有一个是商品来源D,不一定会用于查询条件中。
举个例子,A代表衣服,B代表衣服下的长袖,C代表衣服下的红色的长袖。
如果这三个字段是商品的三个属性,并且要建立索引的话,必然是
A,B,C
的顺序,并且中间不应该有比如D字段(商品来源)因为假设你的索引是这样建立的
D,A,B,C
,那么当你的查询条件中没有D字段的话,那么这个索引将不会被使用到。假设2:索引是这样建立的
A,B,D,C
,当查询语句为:虽然会使用到这个索引,但是这个索引只用到了
A,B
,因为D字段不作为查询条件,所以C字段也没有使用到。这就是最左匹配原则的一种。
再多的,可以再去了解一下数据库索引的数据结构,以及其他最左匹配原则,这里列一下。
上述引用文字来源于丁奇专栏《MySQL实战45讲》