我联合三个表查询,不使用order by desc 排序,需要0.1秒的时间,
但是加上了一个order by DateTypeCol desc 按照一个日期列排序,竟然需要3秒多,
不知道该如何优化,改善,看了很多帖子,有人说为排序列建立索引,
但是针对这种情况不知道该建立什么类型的索引,说明:数据量现在为2万多请各位朋友们指点迷津,谢谢
但是加上了一个order by DateTypeCol desc 按照一个日期列排序,竟然需要3秒多,
不知道该如何优化,改善,看了很多帖子,有人说为排序列建立索引,
但是针对这种情况不知道该建立什么类型的索引,说明:数据量现在为2万多请各位朋友们指点迷津,谢谢
解决方案 »
- ebs 11.O.3版本的*-表示什么??
- 怎样查看所定义过的存储过程列表,另外查看某个存储过程的定义吗
- 触发器语法上求有点困惑
- 在等待,关联表更新出错:执行失败:ORA-00933: SQL command not properly ended
- 如何计算like 语句中找到的关键词数
- 学习 oracle (9i的)吗?这里有视频教学
- 为什么在一个触发器后面不能有代码,否则说触发器编译有错误,该怎么解决?
- imp时报错,该怎么解决?
- 20/80原则与学习ORACL?
- 在Oracle中怎样调用外部的程序并判断其是否结束?
- PHP在Oracle数据库中的一个临时表,在Insert语句ocicommit后查询该表,发现里面没有数据??
- 问个最简单的问题,怎么循环10000次插入记录啊
能给出表结构和sql语句就方便帮你分析了
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
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;
这个字段有没有索引呢?sql> set autotrace on;再执行你的sql,看看执行计划相关 和 相应的成本