好久没更博了,偷偷的抽时间写一下。
早上开始working的时候,发现一个页面加载很慢,经排查是昨天写的一条联合查询的sql导致的。于是着手优化!
首先想到的是在join的时候,减少表体积之后再进行关联,于是有了下面这种写法:
(原sql) a join b on a.bid=b.id => (新sql) a join (select id,phone from b where b.site=35) b on a.bid=b.id
上面是将b表进行where过滤以后再与a表进行关联,执行以后查询相对快了一点,毕竟b表体积小了,关联的时候自然就快了一点。但是,瞅着这句sql就是不太顺眼,毕竟用了子查询,虽然方便,但是感觉还是有损效率的。这个时候,就突然想起以前看到的一个博主写到的,“在使用join以后,可以在on或者where后面加上条件,sql在解析的时候,会先读取条件,再进行关联”,想到这里,就恍然大悟了,何必用子查询?直接后面在where里写条件就好了。
另外一个方面,查询的时候,一般的会有多个表进行关联, 遵循上面的原理,我们一般把小表放后面,查完了小表再去关联大表。
这里我是用的sql server ,查询的时候有个分析工具挺好用的:
就这个,显示估计的执行计划,可以在这里查看sql的执行消耗。
嗯,谈不上什么技术点,就是记录一下。