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 )
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上再建立索引吧
你很明显,用NOT IN这种,速度慢的.
你一定要用到索引,才会速度快.
如你的语句,你可以这样写:
select count(*) from tab1 where exists (select 1 from table2 where table2.col1 = tab1.col1);
当然,前提是,tab2,上有COL1这个字段的索引.
请采纳!
你这个表中是分区表嘛,如果不是的话效率会很低,如果是分区表的话建立上分区索引,这样效率会提高不少。具体的分区表如何建立搜索下。