导航:
论坛 -> 数据库专区
斑竹:liumazi,waterstone
作者:
2021/12/7 15:47:36
标题:
left join ... on 后面表的顺序问题,导致速度差很多.
浏览:1249
加入我的收藏
楼主:
举例: select * from table1 a left join table2 b ---------- on a.userid=b.userid //查询速度很慢. ---------- on b.userid=a.userid //查询速度明显快. ---------- 其中a是流水表,userid多次重复出现,b是人员信息表,userid只有一个. a在前和b在前,查询速度差很多!大家有没有遇过这样子情况的?
----------------------------------------------
-
作者:
2021/12/7 15:51:22
1楼:
补充,在查询管理器中没有显示差异 . 只在APP里才会慢.unidac控件.
----------------------------------------------
-
作者:
2021/12/7 16:32:08
2楼:
要看A/b表总数, 结构发上来看看. select不加where? 什么需求?
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2021/12/7 16:54:12
3楼:
where后面省略了. sql2008+unidac 8.0 a表几百万条,是消费流水,b表10万条,是会员信息.
----------------------------------------------
-
作者:
2021/12/7 17:31:37
4楼:
语句发全,
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2021/12/8 4:37:32
5楼:
楼主是不是很多年都是只做项目、不学习提高理论水平了呢?凭我8年前做MIS项目的学习记忆,应该是因为a b两表的索引设置不同导致的结果,特别是,很可能a的索引比较复杂,或者没有设置索引,导致每次都要到硬盘上去扫描一遍。而b表就正确设置了索引,常驻内存。从索引这个线索找找原因,估计是因为这个。
----------------------------------------------
只有偏执狂才能生存!
作者:
2021/12/8 6:42:44
6楼:
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
该账号是个傻逼
作者:
2021/12/8 9:18:11
7楼:
我觉得楼主的问题很奇怪, 楼上的同学都没认真看题。1)业务逻辑问题 其中a是流水表,userid多次重复出现,b是人员信息表,userid只有一个。 从楼主的表述看: 应该是b left join a 啊…… 选出所有人员,以及关联流水(即使流水为空)。 如果用a left join b 那么就是选出所有的流水,以及关联人员(即使人员为空)?? 当然楼主并没有放真正的SQL,所以不研究了……2)楼主的问题本身 on a.userid=b.userid //查询速度很慢. on b.userid=a.userid //查询速度明显快. 理论上难道不是这两句话一模一样么,和表的规模,有没有索引没有关系啊。 关键是谁 left join 谁。 因为怕理论知识不够,所以我用Oracle12c试了试,确实a=b,b=a的SQL解释完全一致。 而且楼主也说了,在查询管理器中没有显示差异,只在APP里面慢。 所以我觉得问题可能出在楼主没有贴出来的SQL其它部分上面。 也许其它部分的where条件,像上面各位同学说的,影响了索引使用,取数顺序。 至于APP才慢,我完全不懂了。 最后:【sql2008】 是什么鬼,数据库名字么?
----------------------------------------------
Bye bye DDRFAN...