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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 聯絡生活來簡化sql語句SQL
- SQL語句的優化SQL優化
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- SQL語句優化SQL優化
- SQL 語句的優化方法SQL優化
- sql語句的最佳化SQL
- 簡單的SQL語句學習SQL
- SQL語句的分類簡介SQL
- 通過圖表簡化sql語句的表關聯SQL
- 通過分析SQL語句的執行計劃優化SQL語句SQL優化
- 一條簡單SQL語句的構成及語句解析SQL
- MYSQL SQL語句優化MySql優化
- sql語句效能優化SQL優化
- 最佳化sql語句SQL
- 求助:SQL語句優化SQL優化
- mysql 常用sql語句 簡介MySql
- 優化 SQL 語句的步驟優化SQL
- 一個SQL語句的優化SQL優化
- 關於sql語句的優化SQL優化
- 一條sql語句的優化SQL優化
- sql語句的優化案例分析SQL優化
- SQL Server優化之SQL語句優化SQLServer優化
- MySQL之SQL語句優化MySql優化
- SQL語句優化(轉載)SQL優化
- 常用SQL語句優化技巧SQL優化
- Oracle之sql語句優化OracleSQL優化
- 一條簡單的SQL語句優化-新年新氣象SQL優化
- 對sql語句的優化問題SQL優化
- 優化SQL 語句 in 和not in 的替代方案優化SQL
- 簡單SQL語句小結(轉)SQL
- 一句簡單的SQL查詢語句的背後...SQL
- sql最佳化:使用sql profile最佳化sql語句SQL
- Oracle SQL語句優化之UNIONOracleSQL優化
- SQL語句操作符優化SQL優化
- SQL語句優化技術分析SQL優化
- SQL語句優化方法30例SQL優化
- SQL Profiles與語句最佳化SQL
- SQL語句運算子最佳化SQL