先看一个系统AWR的top CPU SQL:

其中排在第二位的SQL是这样的:

SELECT TO_CHAR(:B1 / (60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

SQL虽然简单,但是执行次数却高达6.2亿次/天,消耗了大量的CPU资源。

经检查,这段SQL来自一个将number类型的时间字段转换成日期字符串的function。

这里面就存在2个问题:

1、使用number类型保存日期,使用起来非常不方便(使用varchar2类型保存日期也一样),建议使用date或timestamp保存日期类型。

2、使用sqlplus时,如果要计算一个值,我们会使用select xxx from dual;但是,在function、procedure、package、trigger中,这些纯计算的内容,就不再需要做select from dual的操作了,上面函数就可以将select xxx into ret_str from dual; return ret_str; 简写成:return xxx ;

原function代码示例如下:

CREATE OR REPLACE function number2date1(in_num number ) return varchar2

IS

ret_str varchar2(30);

BEGIN

SELECT TO_CHAR(in_num / (60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS')

into ret_str FROM DUAL;

RETURN ret_str;

END number2date1;

/

优化修改后的function代码如下;

CREATE OR REPLACE function number2date2(in_num number ) return varchar2

is

BEGIN

return TO_CHAR(in_num / (60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') ;

END number2date2;

/

原function多次执行会消耗大量的recursive calls,经过上面的改写后,消耗的资源基本上可以忽略不计了。

简单的改写,节省了大量CPU资源,这就是SQL优化的力量。

oracle select from dual,代码中误用select xxx from dual案例一则相关推荐

  1. html页面select怎么用,HTML中的select标签如何使用

    HTML中select标签可以在表单上的项目中创建公共选择框,本篇文章就来给大家具体介绍一下select标签的用法. 我们首先来看一下什么是select标签? select标签是用于创建选择框的标签. ...

  2. select sqlite 唯一_SQLite中的SELECT子句使用通配符

    SQLite中的SELECT子句使用通配符 在SELECT子句中支持两个通配符,分别为*和table_name.*.其中,*通配符会将FROM子句中每个源表的所有用户定义的列进行输出.例如,下面的SQ ...

  3. (Select)解决:Element-ui 中的 Select 组件用(深度)选择器修改默认样式不生效的问题及如何使用 popper-append-to-body=“false“ 属性

    1.存在修改默认样式不生效问题的展示: A.问题一:虽然通过深度选择器修改了下拉框的背景等样式问题却没有展示: B.问题二:渲染后的 dom 元素并不在 #app 元素内部: // 发现:修改下拉框默 ...

  4. oracle判断单数双数,代码中你所不知道的偶数与奇数的判断方法

    数学上的定义:所有整数不是奇数(单数),就是偶数(双数).若某数是2的倍数,它就是偶数(双数),可表示为2n:若非,它就是奇数(单数),可表示为2n+1(n为整数),即奇数(单数)除以二的余数是一.除 ...

  5. 代码中 TODO FIXME XXX 注释的特殊含义

    TODO: + 说明 : 如果代码中有该标识,说明 在标识处有功能代码待编写 ,待实现的功能在说明中会简略说明. FIXME: + 说明 : 如果代码中有该标识,说明 标 识处代码需要修正,甚至代码是 ...

  6. Python网络编程中的select 和 poll I/O复用的简单使用

    From: http://www.cnblogs.com/coser/archive/2012/01/06/2315216.html 首先列一下,sellect.poll.epoll三者的区别  se ...

  7. plsql中执行SELECT current_date FROM dual,为什么获取的时间不正确?获取的不是我本地的时间

    plsql中执行SELECT current_date FROM dual,为什么获取的时间不正确?获取的不是我本地的时间? 因为plsql是客户端,SELECT current_date FROM ...

  8. mysql select 1 from dual_pl-sql中select * from dual 这个dual是什么

    展开全部 Dual简单的说就是一个空表,Oracle提供的最小62616964757a686964616fe59b9ee7ad9431333366303131的工作表,只有一行一列,具有某些特殊功用. ...

  9. column ambiguously defined oracle数据库分页语句查询中select嵌套时出错

    column ambiguously defined &oracle数据库分页语句查询中select嵌套时出错 转载于 [ lev草梦的博客](http://blog.sina.com.cn/ ...

  10. Oracle中的select into

    Oracle中的select into Oracle中没有select into的用法! 在某些数据库中有select into的用法,用法是: select valueA,valueB into t ...

最新文章

  1. SQL Server 2005 Express 版
  2. java getselectedrow_Java swing(2)自己设计完善的独特功能图书管理系统,获取下拉框等的文字内容等...
  3. QT中的事件传递顺序小论
  4. 学号20145220《信息安全系统设计基础》第12周学习总结
  5. 微处理器:50岁了!
  6. linux查看tcp络连接日志,Linux监控TCP连接数并触发日志记录
  7. 【报告分享】食品饮料行业供应链发展与渠道变革趋势.pdf(附下载链接)
  8. 【优化算法】斑点鬣狗优化算法(SHO)【含Matlab源码 1463期】
  9. dh算法 理论依据_DH算法为什么属于非对称加密算法?
  10. 瀑布模型快速原型模型
  11. 应聘软件测试英文自我介绍,软件测试英文面试自我介绍2篇
  12. 移植内核2.6.24.4到S3C2440
  13. PMP学习笔记 第13章 项目相关方管理
  14. 网络安全之手机安全使用手册
  15. 学习正则表达式 - 匹配 Unicode 和其他字符
  16. aspose将word转换为pdf[aspose.word.java 18.11]
  17. Java核心机制(1)
  18. Attempted import error: ‘Redirect‘ is not exported from ‘react-router-dom‘ (imported as ‘Redirect‘)
  19. 网站关键词优化该怎么做?
  20. 机车车辆薄轮缘型号及尺寸图 JM3型

热门文章

  1. 2020.8.25丨微生物基因组重测序流程梳理
  2. 计算机网络课后习题概略
  3. 最新各大互联网公司薪酬盘点!你想好去哪家了吗?
  4. 中英文双标题latex
  5. 宝塔 php守护 1.2,宝塔面板的Supervisor (进程管理利器) 使用说明 – 附Nginx守护教程...
  6. day 22 内置的模块
  7. Java工程师成神之路
  8. 万维网联盟W3C推荐Web性能API
  9. 为什么RISC-V在中国岌岌可危?
  10. 机器视觉技术的尺寸测量