sql语句的简化

今天碰到一个sql语句简化的问题,虽然也不复杂,但是也值得从中学习一些东西

SELECT MOD(((SELECT TO_NUMBER(TO_CHAR(LOGICAL_DATE, 'YYYY'))
               FROM SMALL_TAB
              WHERE LOGICAL_DATE_TYPE = 'R'
                AND EXPIRATION_DATE IS NULL) * 365 +
           (SELECT TO_NUMBER((SELECT LOGICAL_DATE
                                 FROM SMALL_TAB
                                WHERE LOGICAL_DATE_TYPE = 'R'
                                  AND EXPIRATION_DATE IS NULL) -
                              TRUNC(SYSDATE, 'YYYY'))
               FROM DUAL)) + 1,
           (SELECT NVL(PARAMETER_VALUE+1,366)FROM SMALL_TAB2
                                 WHERE PARAMETER_NAME = 'DAY_PAR')                     
  FROM DUAL

我得到了这样一个sql语句,但是猛一看sql语句里面包含了不少dual。
这样的sql语句是比较臃肿的,感觉需要做一些工作来改动,首先就是需要明确需求,开发想实现什么样的功能,然后在保证结果集准确的前提下来进行简化工作。
大体上沟通以后,sql语句的实现功能类似下面的形式
  SELECT MOD((2014 * 365 + (165)) + 1,
             366)
    FROM DUAL
其实就是计算当前的年份,然后得到对应的天数和当年一月一日以来的天数。 在此基础上做计算得到一个对应的key
简单调整后,就成了下面的样子,把多余的dual全都去掉了。在测试中比较发现,对应的逻辑读一下子从128降低到了64,相应时间也有了一定的提升。
select mod(
            (SELECT TO_NUMBER(TO_CHAR(LOGICAL_DATE, 'YYYY')) * 365 +
                  TO_NUMBER(LOGICAL_DATE - TRUNC(SYSDATE, 'YYYY')) + 1
             FROM SMALL_TAB
            WHERE LOGICAL_DATE_TYPE = 'R'
              AND EXPIRATION_DATE IS NULL),
           (SELECT NVL(PARAMETER_VALUE + 1, 366)
              FROM SMALL_TAB2
             WHERE PARAMETER_NAME = 'DAY_PAR')
           )
  from dual;

其实性能的提升不够明显,但是简单清晰的sql语句,在日常的维护中也能省不少心。

时间: 2024-09-14 14:09:13

sql语句的简化的相关文章

简化SQL语句一例

语句 举个例子,设表名为bbs 回复数的字段为renum 变量名$renum 记录序号字段为id 变量名$id   当我们在论坛回贴时会要改写主贴的回复数,传统的方法要用到到两句SQL语句: //取出原值 $query1="select renum bbs where id = '$id'"; -- $renum++; //写回数据库 $query2="update bbs set renum = '$renum' where id = '$id'"; 简化后如下:

通过图表简化sql语句的表关联

在之前的博文中分享过一个执行了两天的一条sql语句,走了两个大表的扫描,导致执行时间很长,通过简化sql做了不小的改进,今天我们来看看还可以做些什么. 上次简化后的语句如下:with tmp_logical_date as (SELECT logical_date                  FROM logical_date                 WHERE logical_date_type = 'R'                   AND expiration_dat

列表查询组件代码, 简化拼接条件SQL语句的麻烦

控件代码及测试例子:http://files.cnblogs.com/wuhuacong/CommonSearch.rar  使用场景: 在列表页面中,一般有好几个条件, 用户进行查询时候,需要根据这几个条件进行过滤查询.但在组装这些过滤条件的时候,代码比较烦琐臃肿,本组件代码为解决该问题而设计. 使用目的:  1.减少对参数非空的条件判断 2. 可以构造出参数化的DbCommand对象,简化操作. 3.适当修改后可以用于其他数据访问的参数化参数生成.4.构造Sql语句或者参数化条件更加易读 1

联系生活来简化sql语句

目前生产环境中有一条sql语句的CPU消耗很高.执行时间比较长.从awr中抓到的sql语句如下: SELECT   run_request.run_mode, cycle_groups.flow_id,          cycle_groups.request_id, cycle_groups.dynamic_attributes,          cycle_groups.sys_creation_date, cycle_groups.sys_update_date,          c

手把手教你在ASP中使用SQL语句

sql|语句 五花八门的SQL产品多得要命,或许你早顾不得其它甩开袖子就动手干了.但你要同时采用ASP和SQL的话就可能会头晕.MySQL.SQL Server和mSQL都是绝佳的SQL工具,可惜,在ASP的环境下你却用不着它们来创建实用的SQL语句.不过,你可以利用自己掌握的Access知识以及相应的Access技能,再加上我们的提示和技巧,相信一定能成功地在你的ASP网页中加入SQL. 1. SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了.在数据库工具下直接采用

ASP初学者:教你使用使用SQL语句

sql|初学|语句 五花八门的SQL产品多得要命,或许你早顾不得其它甩开袖子就动手干了.但你要同时采用ASP和SQL的话就可能会头晕.MySQL.SQL Server和mSQL都是绝佳的SQL工具,可惜,在ASP的环境下你却用不着它们来创建实用的SQL语句.不过,你可以利用自己掌握的Access知识以及相应的Access技能,再加上我们的提示和技巧,相信一定能成功地在你的ASP网页中加入SQL. 1. SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了.在数据库工具下直

ASP整合的一个SQL语句类

语句 我们在写ASP数据库程序的时候,通常都会用到SQL语句,而在增加数据和更新数据的时候,通常会使用一下方式:insert into message (incept,sender,title,content,sendtime,flag,issend) values ('"&incept(i)&"','"&membername&"','"&title&"','"&message&a

ASP动态网页制作中使用SQL语句的方法

sql|动态|网页|语句 1,SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了.在数据库工具下直接采用SQL的时候很多人都会熟悉下面的操作: SELECT what FROM whichTable WHERE criteria 执行以上语句就会创建一个存放其结果的查询. 而在ASP页面文件上,你也可以采用以上的一般语法,不过情况稍微不同,ASP编程的时候,SELECT 语句的内容要作为字符串赋给一个变量: SQL = "SELECT what FROM whichTa

实例讲解ASP动态网页制作中使用SQL语句

sql|动态|网页|语句 在SQL的世界里,最最基础的操作就是SELECT 语句了.在数据库工具下直接采用SQL的时候很多人都. 在ASP中使用SQL语句之1:用Select查询 熟悉下面的操作: SELECT whatFROM whichTableWHERE cnwebjx 执行以上语句就会创建一个存放其结果的查询. 而在ASP页面文件上,你也可以采用以上的一般语法,不过情况稍微不同,ASP编程的时候,SELECT 语句的内容要作为字符串赋给一个变量: SQL = "SELECT what F