大家好,我是小林。
前几天,在朋友圈发了一个关于联合索引的笔试题,我简单说了我的想法,然后看看朋友圈其他大佬的想法。


结果好家伙,出现了很多大佬一起来分析,每个人分析的思路都很不错,也是一个不错的学习素材,所以就今天整理了一下,给大家一起看看。
建省份与idCare联合索引,省份最左边 limit 10之后,在用子查询过滤sex。
其实还得校验下这个设计的,因为explain查询语句,有可能它最后没有采用索引,而采用了全表扫描,此时就得看查询计划的选择了。
如果数据总量不是很大的情况下,sex加索引也是有效的,另外,题主没有说明表数据的组成情况如果表中只有百分之一的女性,那么sex放第一个我觉得会更快,假如条件是女性的情况下,面试官想听到的应该是思考的过程,而不是特定的结果.
不考虑索引创建带来的存储开销,排序的单独建索引,性别可以建成bit索引。省份也可单独索引。相信数据库在投影上的查询优化。
我觉得这里应该说明一下数据多少的场景,看表字段,性别、省份、身份证号,能推断出是存人的基本信息,当数据量很大的时候,省份、性别区分度很低,不说维护索引导致变更操作效率会低的情况,即使建了索引,由于区分度很低的情况可能也会导致全表扫描,创建的(省份、性别、身份证)索引也不会走,导致身份证也会无序需要重新排列。
所以我的结论是: