别把面试官当神,因为很多问题,他们也不知道答案。甚至他知道的还是错误的答案,而且他现在问你的问题,也可能是他现在正面临的一个技术问题。
今天就遇到了一位面试官,他以为自己就是正确的。其实,他只是在面试人多的时候,来应付你的。
问:联合索引,a,b,c 三个字段联合起来的索引。index(a,b,c),现在我使用 b,c 去 where 查询,会用到索引吗?
我说可能不会,面试官说,你错了。会用到索引的,你下去再复习一下。我还想解释,但是面试官有点不肖一顾,你下去在看看联合索引吧。
我主要是脾气好,要不然,我直接就走了。
现在,我们直接看 demo 吧,证据说话。
建表语句如上所示,然后添加几条测试数据。
然后,EXPLAIN 一下。
执行计划截图如下所示:
如果,我用 b,c 呢?
执行计划如下所示:
相当于全表扫描。
以此类推,你再用一下 (b,c)、(a,c)、(c,a)、(c,b) 等组合试一下。你会发现有一个规律,最左匹配原则。index(a,b,c) 相当于 index(a)、index(a,b)、index(a,b,c) 三个索引。
根据我们上面的表,我们分别执行:
你会发现,只有第一条能使用索引,其他两条都不能按照索引查找。
但,这个时候,你千万不要下结论,说:第二条,第三条查询就不会走索引。因为有一种情况,它们还是会走索引的,那就是当表中只有 a,b,c 三个字段时。
所以,在回答问题时,你也别像我一样,回答的那么肯定。你先说个模糊答案,走不走索引,优化 SQL 看看 EXPLAIN,别去死记硬背。然后,再说,如果没记错的话,应该怎样怎样?
有时候啊,当一起面试的人多的时候,很可能会所以找一个人应付你。因为,真正的面试官忙不过来。这种情况,你会咋办?欢迎留言评论!