两个子查询的连接查询如何提高查询速度

Jz-005 2018-11-20 03:58:34
select a.*,b.*
from (select * from test1) a
left jioin (select * from test2) b on b.id=a.id

a表与b表的数据量很大,查询速度特别慢
...全文
818 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
邹小青 2018-12-24
  • 打赏
  • 举报
回复
这是一个多表关联的问题,试试看《如何优化JOIN性能》这篇文章能否帮到您
风影萧诺 2018-12-20
  • 打赏
  • 举报
回复
3楼说的很对,不要用子查询, 吧on后面的2个字段建成索引,查起来速度飞快,楼主试试
baxiprince 2018-11-25
  • 打赏
  • 举报
回复
用视图把两个表查询到视图上,再select视图,会很快
jacljh 2018-11-24
  • 打赏
  • 举报
回复
引用 8 楼 jacljh 的回复:
可以试试用内连接查询:select a*,b* from test a,test b where a.id=b.id 尽量不要用子查询,影响效率。
6楼提到的问题也是,如果你的表的字段太多a*,b*也会影响效率,你需要哪些字段的值就查那几个具体的字段就好,不要用*
jacljh 2018-11-24
  • 打赏
  • 举报
回复
可以试试用内连接查询:select a*,b* from test a,test b where a.id=b.id 尽量不要用子查询,影响效率。
minsic78 2018-11-23
  • 打赏
  • 举报
回复
这是个外连接,所以连接顺序已经没法调整了,你确定这个外连接是必要的吗? 如果外连接必要的话,给出驱动表test1、test2表的数据总量,以及这个查询最后输出的数据量
yaiger 2018-11-23
  • 打赏
  • 举报
回复
先想好到底要查询哪些数据?两张大表的全量查询,查出来那么多的数据看得过来吗?没有任何条件?所有字段都要查看?不太可能吧
wildwolv 2018-11-23
  • 打赏
  • 举报
回复
一般都不会select a.*和b.*的,select你所需的字段就好
yongcai64900 2018-11-21
  • 打赏
  • 举报
回复
如果只是连接后显示列表的话,不应该把压力都给数据库的。做成分页显示,sql语句只取a表的一个页面,然后在绑定a表这页数据时,根据ID去取b表的数据。这样不是飞快了?
  • 打赏
  • 举报
回复
首先,你的查询其实可以写成:
SELECT a.*,b.*
  FROM test1 a
  LEFT JOIN test2 b ON b.id=a.id
其次,你使用了左外连接,而且没有 WHERE 条件,意味着 test1 中所有的数据都会返回,同时表很大,所以很慢。 建议业务上加一些限制条件,如果一定要查询很多数据给前端显示,考虑使用分页显示;同时确认关联字段(id)上创建了索引;还有,实际项目不要用 * 返回所有字段,只输出你需要的信息。
卖水果的net 2018-11-20
  • 打赏
  • 举报
回复
建议楼主给出比较全的查询语句 和 建表语句。 先看统计信息和执行计划。
Wazy_csdn 2018-11-20
  • 打赏
  • 举报
回复
首先应考虑在 where 及 order by 涉及的列上建立索引,子查询条件内尽量不要使用全表扫描的条件,例如不要使用!=或<>,条件不要使用or来连接等等,如果确实需要OR连接,请修改为union来连接,其实最终目的还是避免全表扫描的条件

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧