oracle 使用order by desc排序查询速度大大降低,求解决方案.

xwjrun 2008-03-01 11:57:54
我联合三个表查询,不使用order by desc 排序,需要0.1秒的时间,
但是加上了一个order by DateTypeCol desc 按照一个日期列排序,竟然需要3秒多,
不知道该如何优化,改善,看了很多帖子,有人说为排序列建立索引,
但是针对这种情况不知道该建立什么类型的索引,说明:数据量现在为2万多

请各位朋友们指点迷津,谢谢
...全文
1407 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiZiNick 2008-04-30
  • 打赏
  • 举报
回复
不知,帮顶
xwjrun 2008-03-03
  • 打赏
  • 举报
回复

select
cv_js_code,cv_name,cv_sex,nvl(cv_work_years,0),cv_degree,js_modify_dt,
CV_NAMESECRET,cv_photo,round((sysdate -CV_BIRTHDAY)/365),
CVX_POS1_DESC||','||CVX_POS2_DESC||','||CVX_POS3_DESC,
CV_LOC_NOW,CVX_EXP_WORK_LOC1, CVX_EXP_WORK_LOC2, CVX_EXP_WORK_LOC3,cvx_fun1,
CVX_POS1 ,CV_SELF_SCORE,CVX_EXP_SALARY ,
f_get_work(cv.cv_code) --把上面的子查询修改.

from jobseeker,cv,cv_expect_work

where CV_VALIDITY='2' and CV_SECURITY=0 and js_code=cv_js_code and cv_code=cvx_cv_code
order by js_modify_dt desc


修改了SQL把上面的子查询改成视图,使用函数f_get_work()查询对应的数据,这样提高了不使用order by 的速度,
但是使用order by查询速度依然很慢.

以下是函数f_get_work()

create or replace function F_GET_WORK(
cv_code IN number
)
return varchar2
as
works varchar2(1000);

begin
select workinfo into works from v_cv_onework where cvw_cv_code=cv_code;
return works;

if works='' or works is null then
return '-';
end if ;

exception
when others then
return '-';
end F_GET_WORK;
xwjrun 2008-03-03
  • 打赏
  • 举报
回复
多谢,这是我的SQL:

select
cv.cv_js_code,decode(cv.CV_NAMESECRET,1,substr(cv.cv_name,1,1),cv.cv_name),
cv.cv_sex,nvl(cv.cv_work_years,0),cv.cv_degree,js.js_modify_dt,
cv.CV_NAMESECRET,cv.cv_photo,round((sysdate -cv.CV_BIRTHDAY)/365),
cew.CVX_POS1_DESC||','||cew.CVX_POS2_DESC||','||cew.CVX_POS3_DESC,
cv.CV_LOC_NOW,cew.CVX_EXP_WORK_LOC1, cew.CVX_EXP_WORK_LOC2, cew.CVX_EXP_WORK_LOC3,cew.cvx_fun1,
cew.CVX_POS1 ,cv.CV_SELF_SCORE,cew.CVX_EXP_SALARY ,d.workinfo

from jobseeker js,cv,cv_expect_work cew,
(select cvw_cv_code,
max(to_char(CVW_FROM_DT,'YYYY-MM-DD')||'至'||decode(CVW_END_DT,null,'现在',to_char(CVW_END_DT,'YYYY-MM-DD'))||','||CVW_COMPANY||':'||CVW_POSITION_DESC||','||CVW_DESC) as workinfo
from cv_work group by cvw_cv_code) d

where CV_VALIDITY='2' and CV_SECURITY=0 and js_code=cv_js_code and cv_code=cvx_cv_code and d.cvw_cv_code=cv.cv_code

order by js.js_modify_dt desc

codearts 2008-03-03
  • 打赏
  • 举报
回复
建个索引,然后看看它的执行计划,再看看逻辑读是否减少了。


能给出表结构和sql语句就方便帮你分析了
xwjrun 2008-03-03
  • 打赏
  • 举报
回复
没一个人帮忙?
codearts 2008-03-03
  • 打赏
  • 举报
回复
js_modify_dt
这个字段有没有索引呢?

sql> set autotrace on;

再执行你的sql,看看执行计划相关 和 相应的成本

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧