1万6千条数据left join 特别慢 求优化sql

0
现在有两张表大约都是1万6千条左右 2张表left join 执行后大约27秒很慢 求优化

select tt.id,tt.email,tt.mobilenum from (select t.id,t.email,t.mobilenum from tmp_table t) tt left join 
(select u.id,u.email from hui_user u where u.meetid = 411) usr on tt.email = usr.email ;
 
数据库:Oracle
已邀请:
1

老头子 - 专注是唯一的捷径 2015-11-01 回答

执行计划也发一下才能给你定位问题,如果不发的话不知道你表上有没有索引,不知道你的统计信息是否最新,也不知道你的数据分布,任何优化都是盲目瞎猜。
不过你不发执行计划,单看你的SQL,能给出的建议只有以下几点:

1. tmp_table 建立email + id + mobilenum 的组合索引
2. hui_user  建立email + id + meetid 索引
3. 去掉子查询
改写成:
select tt.id,tt.email,tt.mobilenum
  from tmp_table  tt
  left join hui_user u
   on tt.email = usr.email
  and u.meetid = 411 ;
0

gogodiy - 天善智能数据库专家、Tableau爱好者 2015-11-02 回答

select	a.id,
a.email,
a.mobilenum
from tmp_table as a with(nolock) left join
hui_user as b with(nolock) on a.email=b.email
where b.meetid = 411;
确保
b.meetid、b.email有索引,
tmp_table可以创建email索引,然后include(id,mobilenum)两个字段。
两张表各1万6千条,数据量很小,如果需要这么长时间,应该是没有索引或者没有正确使用索引。



0

seng - 从事BI、大数据、数据分析工作 2015-11-02 回答

在连接字段建索引,在收集统计信息,然后看看和你已有的执行计划有什么区别。
不过你的语句我也觉得很奇怪,为什么要用子查询啊,虽然不一定影响执行,但就是很怪啊。

要回复问题请先登录注册