前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sql语句的简化(r2第7天)

sql语句的简化(r2第7天)

作者头像
jeanron100
发布2018-03-14 15:09:13
7100
发布2018-03-14 15:09:13
举报
文章被收录于专栏:杨建荣的学习笔记

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

代码语言:javascript
复制

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,相应时间也有了一定的提升。

代码语言:javascript
复制
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语句,在日常的维护中也能省不少心。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2014-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档