别把面试官当神,因为很多问题,他们也不知道答案。甚至他知道的还是错误的答案,而且他现在问你的问题,也可能是他现在正面临的一个技术问题。

今天就遇到了一位面试官,他以为自己就是正确的。其实,他只是在面试人多的时候,来应付你的。

问:联合索引,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,别去死记硬背。然后,再说,如果没记错的话,应该怎样怎样?

有时候啊,当一起面试的人多的时候,很可能会所以找一个人应付你。因为,真正的面试官忙不过来。这种情况,你会咋办?欢迎留言评论!

©著作权归作者所有:来自51CTO博客作者mob604756f06ed8的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 协程相比线程到底好在哪里?
  2. Linux下性能压测之系统参数调优
  3. 基于 Swoft 协程框架的 PHP 微服务治理
  4. Ansible Playbook详解
  5. 我的开源项目——Windows PE和Linux ELF可执行文件解析工具
  6. 关于Cisco Smart Install存在远程命令执行漏洞的情况通报
  7. java线程池模型
  8. 3.2 Ansible Playbooks 高级二
  9. 3.0 Ansible Playbooks基础

随机推荐

  1. IOS学习之WebView加载本地HTML代码或网络
  2. 利用HTML canvas制作酷炫星星坠地粒子特
  3. html5: 新特性(表单)
  4. CHtmlEditCtrl (3): More HTML Editor Op
  5. JQuery函数不能用于初始触发器
  6. 百度地图Api进阶教程-实例高级操作8.html
  7. HTML5新增标签与属性
  8. 如何确定在web页面上呈现的字符串的长度(
  9. telnet建立http连接获取网页HTML内容
  10. jQuery:流体同位素仅在调整大小后才工作