-
select * from tablea ,tableb where tablea.id=tableb.id sql
select * from tablea,tableb 其实可以首先执行这句 sql 就能发现出现的结果是 tablea 的每个记录和 table 中的所有记录都生成一条记录。也就是假如 tablea 有10条记录,tableb 有10条记录,最后会首先 100 条记录。
用 where 条件去过滤内容,在数据量不大的时候,问题不大,但是到了比如表 A有1万 数据,表 B有1万 数据,这样的会就会产生 1 亿的数据,然后再用 where 条件去过渡,性能将下降得十分厉害。 -
用 join on避免笛卡尔积问题,select * from tablea join tableb on tablea.id=tableb.id
执行顺序是先执行on 中的条件,来连接两条数据,大大的减少了需要排除的数据,然后在 where 条件中再去过滤数据。
总结:在实际应用过程中通过关联表的最小粒度关联,可以避免产生笛卡尔积。这里的最小粒度可以理解为表中的唯一性约束的字段值.
网友评论