今天,mentor让查一个接口的select语句为什么那么慢。
于是就去看了,这个接口用了很多单列索引和in。以及模糊搜索, 但是因为需求也没办法写成 like “xx%”这种形式,所以目前就从单值索引和in下手。
我第一反应就是explain语句去看一下走没走索引,是不是走全表了,什么查询类型。
大方向没错,就是中间出了点小插曲,索引命名xx_xx真的很像联合索引。。。结果是单列索引。。嗯。。
我就有个疑问,多个单列索引和联合索引(目前没有联合索引)效率差多少?
于是踏上了求知之旅,到底答案是什么,博客和explain关键字一起说话。 首先查了下博客看有没有能解答我疑惑的。 还真有,结论是:
如果两(多)个单列索引的查询条件 用 and 连接,会导致只有第一个单列索引生效,后面的索引都不生效。 如果用or,可以。
但也不能完全相信别人的东西,还是要自己实践知真知。 经验正 确实 如果索引a和b都是主键索引, 用类似 select * where a = 1 and b = 2的语句确实会导致 b失效。 (由于是公司的数据库,就不配图啦,口头描述下相信大家能get到~
于是很容易得到解决方法,就是合理的建一个联合索引,把区分度最大的放前面。 比如城市和性别,城市应该在前。 搞定,明早和mentor提。
至于 in的效率优化问题~下一篇博客再说。
已经在大厂实习快一个月了,适应的还可以,公司的代码都能看懂,除了最开始打点监控限流的互联网写法以前没见过,其他自己都很理解,毕竟大学四年也不是光吃饭了。比赛没白打,课题不白做,校企合作也没白实习。 每天任务就是完成自己负责的代码,然后找mentor去review,平时去改一些bug(比如其他大佬活多没时间找的,实习生事少~就我来做啦。这个必须要解释一下。。)然后配api服务,配打点监控(已经比早我来之前的人还熟,诶嘿。)主要还是写代码,帮 忙的人 找bug。
写代码没什么问题,这里写代码指的是写的清晰干净让别人能看懂,同时代码设计要选最优的那种,思考的时间应该要比上手写长很多很多的。 mentor对我的建议就是要对业务有更深的理解,毕竟这也是我头一次接触电商。 我挺喜欢现在的生活的,就是白天工作晚上回家,很简单,我本身也有极简主义的倾向。白天就专心工作,晚上就好好休息。若是没累到,就再看一点东西。但是讲真每天回去还是很累的哈哈哈。 累并快乐着。
|