联接查询优化
避免多表Join (三张表及以上)
如果数据库的性能无限强大,多个表的
nested loop join 就是分别从两个表读一行数据进行两两对比,复杂度是n^2 。block nested loop join 是分别从两个表读很多行数据,然后进行两两对比,复杂度也是n^2 ,只是少了些函数调用等overhead 。index nested loop join 是从第一个表读一行,然后在第二个表的索引中查找这个数据,索引是B+ 树索引,复杂度可以近似认为是nlogn ,比上面两个好很多,这就是要保证关联字段有索引的原因。- 如果有
hash join ,就不用做这种限制了,用第一个表(小表)建hash table ,第二个表在hash table 中查找匹配的项,复杂度是n 。缺点是hash table 占的内存可能会比较大,不过也有基于磁盘的hash join ,实现起来比较复杂。
可是我确实需要两个表里的数据链接在一起啊,我们可以做个冗余,建表的时候,就把这些列放在一个表里,比如一开始有