连表查询都用Left Join吧

最近看同事的代码,SQL连表查询的时候不少时候用的是Inner Join,而我以为对咱们的业务而言,99.9%都应该使用Left Join(还有0.1%我不知道在哪),我用最简单的方式来描述这二者的区别,直接看图(有点草啊):性能

个人作法是永远把查询主体放在左边,而后右边挨个连上要附加的信息,有则连上,没有则留null,这样思路是最清晰的。字体

Inner Join跟这个的区别是若是附加表找不到对应ID,那么这行记录就不会出现,我在图中用红色字体说明了这个区别。(各类Join的方式没有任何性能上的差异,只有功能上的差异)blog

另一定必定要注意这几点:索引

  1. extra id这样的字段必定要指向附加表的主键。这并不是SQL技术上的要求,而是咱们业务逻辑的要求,若是指向的附加表的extra id不惟一,那极有可能带来你不想要的结果(一般是大量的重复),逻辑上也很难描述了。
  2. 若是附加表的extra id没有索引,将大大影响连表的效率。
  3. 若是想确保必定能带出附加信息,可使用非空约束和外键约束。

我就简单这么定了:必定使用Left Join(除非你明确知道本身想要的是Inner Join),连表的列必定是指向另外一张表的主键的。效率

相关文章
相关标签/搜索