我想到了两条;
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 条件是在临时表建立之后再过滤,但是效率居然差那么多,这到底是怎么回事,有朋友可以帮我解决这个疑问吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/264103
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.