SQL效率/优化/子查询
有个功能,目前的SQL如下:selectcount(*)fromtab1wherecol1notin(selectcol1fromtab2);这个效率太慢了。有什么方法能...
有个功能,目前的SQL如下:select count(*) from tab1 where col1 not in (select col1 from tab2);
这个效率太慢了。有什么方法能实现这个功能,效率能高点。执行速度能快点。一个表的记录能有300多万。执行太慢了。。 账号里没多少分了。只有这么多。希望高手能帮帮忙。
这个查询功能 还有个同样的表要用到,记录是1800多万。exist效率不行。 展开
这个效率太慢了。有什么方法能实现这个功能,效率能高点。执行速度能快点。一个表的记录能有300多万。执行太慢了。。 账号里没多少分了。只有这么多。希望高手能帮帮忙。
这个查询功能 还有个同样的表要用到,记录是1800多万。exist效率不行。 展开
5个回答
展开全部
1、用表连接替代子查询
select count(*) from tab1 t1, tab2 t2 where t1.col1=t2.col2
2、建立索引
create index I_tab1_col1 on tab1( col1 )
create index I_tab2_col1 on tab2( col1 )
select count(*) from tab1 t1, tab2 t2 where t1.col1=t2.col2
2、建立索引
create index I_tab1_col1 on tab1( col1 )
create index I_tab2_col1 on tab2( col1 )
更多追问追答
追问
说详细点。这么查根本不行。索引我早就建了。
追答
抱歉,逻辑看反了,采用楼上的应该可以,如效率仍不满意,试试下面这个:
select count(*) - ( select count(*) from tab1 t1, tab2 t2 where t1.col1=t2.col1 ) from tab1
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SQL本身没有问题,数据量也没有太夸张,全是内连接也不构成问题,真正影响执行性能的是IN和NOT IN,特别是最后的NOT IN,随着数据量增加,执行效率直线下降。优化方法就是少用IN和NOT IN。
追问
等于没说。你说的我 都知道
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SELECT COUNT(1)
FROM tab1
WHERE NOT EXISTS (SELECT col1 from tab2 and col1 = tab1.col1)
col1上再建立索引吧
FROM tab1
WHERE NOT EXISTS (SELECT col1 from tab2 and col1 = tab1.col1)
col1上再建立索引吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你很明显,用NOT IN这种,速度慢的.
你一定要用到索引,才会速度快.
如你的语句,你可以这样写:
select count(*) from tab1 where exists (select 1 from table2 where table2.col1 = tab1.col1);
当然,前提是,tab2,上有COL1这个字段的索引.
请采纳!
你一定要用到索引,才会速度快.
如你的语句,你可以这样写:
select count(*) from tab1 where exists (select 1 from table2 where table2.col1 = tab1.col1);
当然,前提是,tab2,上有COL1这个字段的索引.
请采纳!
追问
试过。效率还是不行。
追答
看看执行计划?发出来.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个表中是分区表嘛,如果不是的话效率会很低,如果是分区表的话建立上分区索引,这样效率会提高不少。具体的分区表如何建立搜索下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询