MySQL 关于联合索引的字段顺序规则讨论

Mysql 建立联合索引时,我这边一般是基数小的排在前面,基数大的排在后面。『如果不对,欢迎指正,谢谢大家!』

今天后辈问起联合索引为何是基数小的排在前面?基数大的排在后面?

想了很久,都不知怎么解释。。。

如果是你,你要怎么向后辈解释联合索引的字段顺序规则呢?

Tip: 网上找了很久,也没找到联合索引字段顺序说明的优质文章。。。

基数越小表示非重复数据少,比如性别只有男和女的话,基数就是 2;再比如月份只有 12 个月,那么基数就是 12,所以性别字段的基数比月份字段的基数小。

MySQL  关于联合索引的字段顺序规则讨论

编程就像呼吸,学会那天起一日不敢荒废。
ZsmHub
讨论数量: 3

为啥一定要基数小的在前呢?如果我设置最常用的where搜索频次最高的在前不行么

3年前 评论

按LZ的场景,假定所有字段的搜索频次都是无差异的;其实个人觉得和基数是没是没什么关系的,假设LZ用的索引数据结构是B+TREE,那么你用“基数大×基数小”, 对比“基数小×基数大”构建出来的二叉树数据结构的叶子节点数是一样(在二叉树下,甚至连深度都是一样的),既然树的大小、算法复杂度、深度都一样,个人认为查询效率上是不存在有什么区别的。『没有实际尝试过、如果不对,欢迎指正,谢谢大家!』

3年前 评论

我的理论告诉我,应该基数大的在前面 例如 id(非重复) 和 性别做联合索引, 我需要查 id=10 and sex = male 那么直接用 id 就能够定位到行; 而反过来建索引,则需先检索全部男生,再找 id = 10 (仅我个人的观点,等明天我建表试试)

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!