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語句,在日常的維護中也能省不少心。
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語句,在日常的維護中也能省不少心。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1188534/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- SQL語句優化SQL優化
- 簡單的SQL語句學習SQL
- MySql和簡單的sql語句MySql
- mysql 常用sql語句 簡介MySql
- MYSQL SQL語句優化MySql優化
- SQL語句最佳化SQL
- sql語句效能優化SQL優化
- 優化 SQL 語句的步驟優化SQL
- DBeaver如何快速格式化sql語句,真簡單!SQL
- MySQL之SQL語句優化MySql優化
- [20201210]sql語句優化.txtSQL優化
- [20200320]SQL語句優化的困惑.txtSQL優化
- SQL Server-簡單查詢語句SQLServer
- SQL語句SQL
- SQL語句IN的用法SQL
- [20181114]一條sql語句的優化.txtSQL優化
- 織夢CMS最簡單實用的SQL語句SQL
- Sql語句本身的優化-定位慢查詢SQL優化
- [20200324]SQL語句優化的困惑2.txtSQL優化
- SQL語句優化的原則與方法QOSQL優化
- 【SQL】9 SQL INSERT INTO 語句SQL
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】11 SQL DELETE 語句SQLdelete
- SQL SELECT 語句SQL
- sql常用語句SQL
- 資料庫介紹--認識簡單的SQL語句資料庫SQL
- 最簡單的sql語句(增刪改查統計)SQL
- mybatis 得sql語句對應簡單型別MyBatisSQL型別
- SQL優化案例-單表分頁語句的優化(八)SQL優化
- MySQL 52個SQL效能優化策略SQL語句彙總MySql優化
- sql語句如何執行的SQL
- MySQL中常用的SQL語句MySql
- sqlserver dba常用的sql語句SQLServer
- SQL 語句的注意事項SQL
- sql宣告變數,及if -else語句、while語句的用法SQL變數While
- 1.3. SQL 語句SQL
- Oracle基本SQL語句OracleSQL
- Sql語句小整理SQL