写存储过程吧:create or replace function getColt(colt in varchar2) return varchar2 is Result varchar2(100); begin select t$valu into Result from baan.ttdltc012201 where t$colt = colt and t$cpft = '015'; return(Result); end getColt;select t$valu as 发动机号 , t$colt as 底盘号, getColt(t$colt) as 变速箱号 from baan.ttdltc012201 where t$cpft = '010';这样就没有关联带来的效率问题了。
加索引是必要的.然后就是数据分区. 如果用 Group by 数据又多的话,可以用临时表方式.从而缩细范围加快查询.[推荐] ORACLE SQL性能优化系列 http://www.csdn.net/develop/author/netauthor/black_snail/[排序,临时表...] http://www.itpub.net/showthread.php?s=&threadid=84823
Result varchar2(100);
begin
select t$valu into Result from baan.ttdltc012201 where t$colt = colt and t$cpft = '015';
return(Result);
end getColt;select t$valu as 发动机号 , t$colt as 底盘号, getColt(t$colt) as 变速箱号
from baan.ttdltc012201 where t$cpft = '010';这样就没有关联带来的效率问题了。
如果是四张表呢(其实是四张表,还要加group by,最后的反应时间,天知道是多少)?
如果用 Group by 数据又多的话,可以用临时表方式.从而缩细范围加快查询.[推荐] ORACLE SQL性能优化系列
http://www.csdn.net/develop/author/netauthor/black_snail/[排序,临时表...]
http://www.itpub.net/showthread.php?s=&threadid=84823
2、查询尽量采用分页显示,每一次只取需要的数据,如:第n到第m条记录。
rule 模式下的规则:1、有两个索引存在的情况下,from后面大表在前。小表(返回记录少的表,不是记录少的表)在最后,作为驱动表,Oracle处理SQL语句是从左到右2、有一个索引,则顺序无关3、都没有索引,则大表应该在后