目前創(chuàng)新互聯(lián)已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管運(yùn)營、企業(yè)網(wǎng)站設(shè)計、鄠邑網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
Oracle case when 改寫 SQL
--- 說明:案例來自《 收獲,不止SQL 優(yōu)化 》
創(chuàng)建測試數(shù)據(jù):
SQL > drop table t1 purge ;
SQL > drop table t2 purge ;
SQL > create table t1 as select * from dba_objects ;
SQL > create table t2 as select * from dba_objects ;
SQL > update t2 set status = 'INVALID' WHERE ROWNUM <= 10000 ;
SQL > update t2 set generated = 'Y' WHERE ROWNUM <= 10000 ;
SQL > update t2 set temporary = 'Y' WHERE ROWNUM <= 10000 ;
SQL > update t2 set temporary = 'M' WHERE temporary <> 'Y' ;
SQL > update t2 set temporary = 'Q' WHERE temporary <> 'Y' or temporary <> 'M' ;
SQL > COMMIT ;
SQL > set autotrace traceonly
SQL > set linesize 1000
原 SQL :
SQL> select t1.object_name, t1.object_id, (select count(*) from t2 where temporary = 'Y' and t2.object_id = t1.object_id) CNT_TEMPORARY_Y, (select count(*) from t2 where created >= sysdate - 365 and t2.object_id = t1.object_id) CNT_CREATED_NEW, (select sum(object_id) from t2 where status <> 'VALUD' and t2.object_id = t1.object_id) SUM_OBJID_STATUS_V, (select sum(object_id) from t2 where generated = 'Y' and t2.object_id = t1.object_id) SUM_OBJID_GENERATED_Y, (select sum(object_id) from t2 where generated = 'M' and t2.object_id = t1.object_id) SUM_OBJID_GENERATED_M, (select sum(object_id) from t2 where generated = 'Q' and t2.object_id = t1.object_id) SUM_OBJID_GENERATED_Q from t1 where t1.object_id <= 50;
case when改造 后的 SQL :
with w_t2 as (select t2.object_id, count(case when t2.temporary='Y' then 1 end ) CNT_TEMPORARY_Y, count(case when created >=sysdate-365 then 1 end ) CNT_CREATED_NEW, sum(case when t2.status<>'VALID' then t2.object_id end ) SUM_OBJID_STATUS_V, sum(case when t2.generated = 'Y' then t2.object_id end ) SUM_OBJID_GENERATED_Y, sum(case when t2.generated = 'M' then t2.object_id end ) SUM_OBJID_GENERATED_M, sum(case when t2.generated = 'Q' then t2.object_id end ) SUM_OBJID_GENERATED_Q from t2 group by t2.object_id) select t1.object_name,t1.object_id,w_t2.* from t1,w_t2 where t1.object_id=w_t2.object_id and t1.object_id<=50;
結(jié)論: SQL 改寫后 T2 表訪問次數(shù)由 6 次降到 1 次,邏輯讀 consistent gets 由 320100 降到 2580 ,性能有所提升。
歡迎關(guān)注我的微信公眾號"IT小Chen",共同學(xué)習(xí),共同成長?。?!
網(wǎng)頁標(biāo)題:Oraclecasewhen改寫SQL
文章來源:http://bm7419.com/article26/jdegjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站內(nèi)鏈、網(wǎng)站營銷、網(wǎng)站設(shè)計、品牌網(wǎng)站制作、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)