请选择 进入手机版 | 继续访问电脑版
  • 关注官方微信 微信公众号 添加方式:
    1:搜索微信号(gogolinux
    2:扫描左侧二维码
  • 登录 注册
  • 一起学LINUX - GOGOLINUX

    查看: 1388|回复: 0

    30个Oracle语句优化规则详解(四)

    [复制链接]

    7

    主题

    7

    帖子

    30

    积分

    新手上路

    Rank: 1

    积分
    30
    发表于 2019-6-5 14:56:28 | 显示全部楼层 |阅读模式
    15.减少对表的查询
    在含有子查询的SQL语句中,要特别注意减少对表的查询。
    例如:
    低效
    SELECT TAB_NAME
    FROM TABLES
    WHERE TAB_NAME = ( SELECT TAB_NAME
    FROM TAB_COLUMNS
    WHERE VERSION = 604)
    AND DB_VER= ( SELECT DB_VER
    FROM TAB_COLUMNS
    WHERE VERSION = 604)
    高效
    SELECT TAB_NAME
    FROM TABLES
    WHERE (TAB_NAME,DB_VER)
    = ( SELECT TAB_NAME,DB_VER)
    FROM TAB_COLUMNS
    WHERE VERSION = 604)
    Update 多个Column 例子:
    低效:
    UPDATE EMP
    SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES),
    SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES)
    WHERE EMP_DEPT = 0020;
    高效:
    UPDATE EMP
    SET (EMP_CAT, SAL_RANGE)
    = (SELECT MAX(CATEGORY) , MAX(SAL_RANGE)
    FROM EMP_CATEGORIES)
    WHERE EMP_DEPT = 0020;
    16.通过内部函数提高SQL效率
    SELECT H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC,COUNT(*)
    FROM HISTORY_TYPE T,EMP E,EMP_HISTORY H
    WHERE H.EMPNO = E.EMPNO
    AND H.HIST_TYPE = T.HIST_TYPE
    GROUP BY H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC;
    通过调用下面的函数可以提高效率。
    FUNCTION LOOKUP_HIST_TYPE(TYP IN NUMBER) RETURN VARCHAR2
    AS
    TDESC VARCHAR2(30);
    CURSOR C1 IS
    SELECT TYPE_DESC
    FROM HISTORY_TYPE
    WHERE HIST_TYPE = TYP;
    BEGIN
    OPEN C1;
    FETCH C1 INTO TDESC;
    CLOSE C1;
    RETURN (NVL(TDESC,’?’));
    END;
    FUNCTION LOOKUP_EMP(EMP IN NUMBER) RETURN VARCHAR2
    AS
    ENAME VARCHAR2(30);
    CURSOR C1 IS
    SELECT ENAME
    FROM EMP
    WHERE EMPNO=EMP;
    BEGIN
    OPEN C1;
    FETCH C1 INTO ENAME;
    CLOSE C1;
    RETURN (NVL(ENAME,’?’));
    END;
    SELECT H.EMPNO,LOOKUP_EMP(H.EMPNO),
    H.HIST_TYPE,LOOKUP_HIST_TYPE(H.HIST_TYPE),COUNT(*)
    FROM EMP_HISTORY H
    GROUP BY H.EMPNO , H.HIST_TYPE;
    分享到:
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    官方微博:

    官方头条号:

    官方微信

    手机访问:

    官方微信

    QQArchiver 手机版 小黑屋 一起学LINUX - GOGOLINUX 闽ICP备18025837号-1 Discuz! X3.4 Powered by © 2001-2013 Comsenz Inc. 

    本站资源均来自互联网或会员发布,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!

    快速回复 快速发帖 返回顶部 返回列表