• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
记得承诺过
博客园    首页    新随笔    联系   管理    订阅  订阅

数据库性能优化

多个表关联的sql语句,如果某个关联的表只取个别字段,则子查询效率比表关联高一些。

以下的子查询取部门和职位的描述的写法,比直接关联部门和职位表取描述的效率高一些。

WITH TMP AS
(SELECT B.EMPLID,
B.EMPL_RCD,
B.setid_dept,
B.DEPTID,
B.HR_STATUS,
B.BUSINESS_UNIT,
B.POSITION_NBR,
B.EFFDT
FROM PS_JOB B
WHERE B.EFFDT = (SELECT MAX(B_ED.EFFDT)
FROM PS_JOB B_ED
WHERE B_ED.EMPLID = B.EMPLID
AND B_ED.EMPL_RCD = B.EMPL_RCD)
AND B.EFFSEQ = (SELECT MAX(B_ES.EFFSEQ)
FROM PS_JOB B_ES
WHERE B_ES.EMPLID = B.EMPLID
AND B_ES.EMPL_RCD = B.EMPL_RCD
AND B_ES.EFFDT = B.EFFDT))
SELECT SEC.OPRID,
A.EMPLID,
B.EMPL_RCD,
A.NAME,
A.NAME_AC,
B.HR_STATUS,
B.BUSINESS_UNIT,
B.DEPTID,
(SELECT C.DESCR
FROM PS_DEPT_TBL C
WHERE C.EFFDT = (SELECT MAX(EFFDT)
FROM PS_DEPT_TBL C_ED
WHERE B.SETID_DEPT = C.SETID
AND B.DEPTID = C.DEPTID
AND C_ED.SETID = C.SETID
AND C_ED.DEPTID = C.DEPTID
AND C_ED.EFFDT <= B.EFFDT)),
B.POSITION_NBR,
(SELECT D.DESCR
FROM PS_POSITION_DATA D
WHERE D.EFFDT = (SELECT MAX(EFFDT)
FROM PS_POSITION_DATA D_ED
WHERE B.POSITION_NBR = D.POSITION_NBR
AND D_ED.POSITION_NBR = D.POSITION_NBR
AND D_ED.EFFDT <= B.EFFDT))
FROM PS_EMPLMT_SRCF_QRY SEC, PS_NAMES A, TMP B
WHERE SEC.EMPLID = B.EMPLID
/* and b.emplid='20130581'*/
AND SEC.EMPL_RCD = B.EMPL_RCD
AND A.EMPLID = B.EMPLID
AND SEC.OPRID = 'PS'
and a.NAME LIKE '郭伟丽%'

PLSQL 查看执行计划

一般来说正常的优化器逻辑是先过滤数据(filter)然后再关联

 

 

 

 

 

 

 

 

 

 

统计信息更新会对执行效率有一定的影响

BEGIN
DBMS_STATS.GATHER_TABLE_STATS(ESTIMATE_PERCENT => DBMS_STATS.AUTO_SAMPLE_SIZE,
ownname => 'SYSADM',
tabname => 'PS_JOB',
METHOD_OPT => 'for all indexed columns',
DEGREE => DBMS_STATS.DEFAULT_DEGREE,
CASCADE => TRUE);
END;

 

 

创建序号用Oracle NEXTVAL 

:
SQLExec("SELECT TRANSACTION_NBR.NEXTVAL FROM DUAL", &returnValue);
:
CREATE SEQUENCE "SYSADM"."TRANSACTION_NBR" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE ;

 

posted @ 2018-12-20 15:05  记得承诺过  阅读(255)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3