表 t_a (
idvarchar2(20);
namevarchar2(200);
date date;
type varchar2(3);
valuenumber(16,4);
-- 其它字段若干
)
现约 30,000 条数据
表 t_b (
id varchar2(8);
name varchar2(100);
--其它字段若干
)
现约500条记录
两个表都没有任何keys,checks,t_a 的 id 实际上是来自 t_b,name是冗余过来的.
要找出 t_a中所有id前4位不在t_b的id前4位中的记录,并根据date和type汇总value
我这样写的
select a.id
,a.name,
,a.date
,a.type
,sum(a.value)
from t_a a
where a.substr(a.id,0,4) not in (select substr(id, 0,4) from t_b)
group by a.id, a.name, a.type
plsql中执行,检索出来1000条左右的数据,花费了5秒多
感觉费时有点长,请问这种情况正常吗?表 t_b 数据量基本上不会变了,t_a可能数据量比较大
单从sql语句本身来说有什么能改进的地方吗?
|