我想到了两条;
1 : 多表查询查询,数据量越小的表放最右边(亲测,是这么回事,但是不清楚原理,希望有朋友可以跟我讲一下在查询的过程中都发生了什么)。
2 :多表查询,特别对于数据量大的表,能先过滤先过滤在联查,这样可以减少笛卡尔积,提速不少。
最后抛一个疑问
现有 A B 两个表, A 表中有 150w 数据 , B 有 100 条
1: select a.id, b.id, count(b.id) from A a left join B b on a.bid=b.id and b.is_exists=1 group by b.id;
2: select a.id, b.id, count(b.id) from A a left join B b on a.bid=b.id where b.is_exists=1 group by b.id;
这两条 sql 的运行效率差好大, 1 的效率比 2 的效率慢了 3 倍(用 mysql 测试),网上查了一下资料说 left join 会产生一张临时表, on 条件是在临时表建立之间过滤, where 条件是在临时表建立之后再过滤,但是效率居然差那么多,这到底是怎么回事,有朋友可以帮我解决这个疑问吗?