SQL语句重构
消除重复的模式(union之类的集合操作符的不同部分;子查询中的select,from,where子句中;from子句中以各种其他方式出现的引用) 技术:case,汇总技术; with子句;去掉没必要的distinct转移到子查询;min之类的函数会忽略null;去掉无用的连接;union去掉了重复记录,因此distinct不是必要的;如果有外部连接需要返回记录,则外连接没有意义会更慢,应该改为内连接; in() 隐含着一个distinct
玩转子查询
及早启用过滤条件
简化条件(让访问每个表的次数尽可能的少)
如果几个子查询引用的是同一个表,那么就检查一下是否能一遍就收集到所有的信息
select ...from a, (select ... from b, t1 where ... union select from b, t2 where ...)where ...