zoukankan      html  css  js  c++  java
  • ORCALE执行效率只TO_CHAR大坑

    1.我在优化代码时碰到SQL语句执行缓慢的问题,最后定位到了这个方法  

    MED_OPERATION_SCHEDULE 表中含有50万条数据
    CREATE OR REPLACE FUNCTION FUN_GET_ANES_LOAD(USERID       VARCHAR2,
                                                 SCHEDULEDATE DATE)
      RETURN VARCHAR2 IS
      HASSCHEDULEDTIME VARCHAR2(20);
    BEGIN
      SELECT SUM(OS.OPERATING_TIME)
        INTO HASSCHEDULEDTIME
        FROM MED_OPERATION_SCHEDULE OS
       WHERE TO_CHAR(OS.SCHEDULED_DATE_TIME, 'YYYY-MM-DD') =
             TO_CHAR(SCHEDULEDATE, 'YYYY-MM-DD')
         AND (OS.ANESTHESIA_DOCTOR = USERID OR OS.ANESTHESIA_ASSISTANT = USERID OR
              OS.SECOND_ANESTHESIA_ASSISTANT = USERID OR
              OS.THIRD_ANESTHESIA_ASSISTANT = USERID OR
              OS.FOURTH_ANESTHESIA_ASSISTANT = USERID)
         AND OS.STATE <> -1;
      RETURN HASSCHEDULEDTIME;
    END FUN_GET_ANES_LOAD;

    2.整个方法执行下来 要14秒多 严重影响系统效率,后经指点 代码优化

    CREATE OR REPLACE FUNCTION FUN_GET_NURSE_LOAD
    (
    USERID       VARCHAR2,
    SCHEDULEDATE DATE
    )
      RETURN VARCHAR2 IS
      HASSCHEDULEDTIME VARCHAR2(20);
    BEGIN
      SELECT SUM(OS.OPERATING_TIME)
        INTO HASSCHEDULEDTIME
        FROM MED_OPERATION_SCHEDULE OS
       WHERE OS.SCHEDULED_DATE_TIME > SCHEDULEDATE 
       and OS.SCHEDULED_DATE_TIME < TO_DATE(TO_CHAR(SCHEDULEDATE,'YYYY-MM-DD') ||' 23:59:59','yyyy-mm-dd hh24:mi:ss')
         AND (OS.FIRST_OPERATION_NURSE = USERID OR
              OS.SECOND_OPERATION_NURSE = USERID OR
              OS.THIRD_OPERATION_NURSE = USERID)
    
          AND OS.STATE <> -1;
      RETURN HASSCHEDULEDTIME;
    END FUN_GET_NURSE_LOAD;

    改变的代码是

    TO_CHAR(OS.SCHEDULED_DATE_TIME, 'YYYY-MM-DD') =
             TO_CHAR(SCHEDULEDATE, 'YYYY-MM-DD')
    
    
    变更为 
    
     OS.SCHEDULED_DATE_TIME > SCHEDULEDATE 
       and OS.SCHEDULED_DATE_TIME < TO_DATE(TO_CHAR(SCHEDULEDATE,'YYYY-MM-DD') ||' 23:59:59','yyyy-mm-dd hh24:mi:ss')

    代码效率一下子提升 只需要执行零点几秒

    后来才知道 to_char 会丢失索引 仅此记录

    等风来,不如追风去。
  • 相关阅读:
    Code-Helper:RegexHelper.cs
    Code-Convert:Image to base64
    un-System.Reflection.IReflect.cs
    System.Reflection.AssemblyName.cs
    System.Reflection.ConstructorInfo.cs
    System.Attribute.cs
    ERROR<53761>
    /dev/null 文件
    linux telnet服务安装与配置
    linux定时任务2-at命令
  • 原文地址:https://www.cnblogs.com/ning-xiaowo/p/14972175.html
Copyright © 2011-2022 走看看