二個SQL tuning例子(使用case)
減少對錶的掃描次數,將大大有利於執行的效率
例子1(低效):
select z.dept_name
from(select item_key,dept_name,min(b.begin_date) t1
from table1 a,table2 b
where activity_name='1';
and .....
group by ...) z,
(select item_key,min(b.begin_date) t2
from table1 a, table2 b
where activity_name='2'
and....
group by....) w,
(select item_key,max(b.begin_date) t3,min(b.end_date) t4
from table1 a, table2 b
where activity_name='3'
and.....
group by.....)Q
where z.item_key = w.item_key
and w.item_key = Q.item_key
例子1的(高效):
select dept_name,
max(T1) T1,
max(T2)T2
from (select dept_name,
(case
when activity_name = '1') then min(a.begin_date) else null end) t1,
(case
when activity_name='2') then min(a.end_date) else null end) t2
from table1 a, table2 b
where activity_name in('1','2');
and ......
and.....
說明:有些情況下,可以用case語句來提高效率。
例子二(高效)(case when 後面可接條件表示式,可以用於統計數量,效率還可以):
select t.dw,sum(case when exists(select 1 from table2 a
where a...= t....) and t...
then '1'
else '0' end ) 數量1,
sum(case when exists(select 1 from tabble 2 a
where a... = t...) and t...
then '1'
else '0' end) 數量2
from table t
where t.org_no like ''
and t.....
group by t.org_no
例子二(比前者低效)
select dw, sum(case when xm='數量1' then sl else 0 end)數量1,
sum(case when xm='數量2' then sl else 0 end)數量2
from (select t.org_no dw,'數量1' xm,count(*) sl
from table t
where t....
and t......
and exists(select 1 from table2 a
where a......)
group by t.org_no
union
select t.org_no dw, '數量2' xm,count(*) sl
from table t
where t.....
and exists(select 1 from table2 a
where a....)
group by t.org_no)
group by dw
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24214296/viewspace-1035165/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用sql tuning advisor最佳化sqlSQL
- SQL Access Advisor、SQL Tuning Advisor 測試SQL
- Oracle SQL優化之sql tuning advisorOracleSQL優化
- SQL CASE 表示式SQL
- oracle SQL最佳化器SQL Tuning Advisor (STA)OracleSQL
- Oracle自帶工具sql優化集-SQL Tuning Advisor (使用心得體會)OracleSQL優化
- [20191112]SQL Tuning by adding column alias (2).txtSQL
- sql case when, Exist ,group by ,聚合SQL
- Oracle case when改寫SQLOracleSQL
- SQL Server CASE WHEN ... THEN ... ELSE ... ENDSQLServer
- 10個SQL技巧之二:使用遞迴SQL生成資料SQL遞迴
- 瞭解GaussDB SQL中CASE表示式SQL
- sql學習:終於把sql case語句使用講明白了,一看就懂SQL
- 使用select,兩個case 讀取 同一個chan 中的資料,兩個case都可能被執行到
- Oracle 11 sql tuning advisor sql access advisor關閉以及job檢視與停止OracleSQL
- 神奇的 SQL 之 CASE表示式,妙用多多 !SQL
- GaussDB SQL基本語法示例-CASE表示式SQL
- (一)《SQL進階教程》學習記錄--CASESQL
- 使用 Angular Transfer State 的一個具體例子Angular
- RxJS CombineLatest operator 的一個具體使用例子JS
- Angular Reactive Form 的一個具體使用例子AngularReactORM
- Oracle優化案例-關閉auto space advisor和sql tuning advisor(十九)Oracle優化SQL
- mysql中case when的使用MySql
- Oracle 11g新特新--SQL Test Case BuilderOracleSQLUI
- expdp一個例子
- TUNING THE REDOLOG BUFFER
- Visual Instruction TuningStruct
- Mybatis學習筆記 1:一個Mybatis使用例子MyBatis筆記
- 一個簡單的例子教會您使用javapJava
- 使用javap分析Java位元組碼的一個例子Java
- SQLServer使用case when中的order bySQLServer
- Golang switch case 的使用注意點Golang
- SQL語句case when外用sum與count的區別SQL
- SQL中的case when then else end用法 【詳細】轉載SQL
- 解密Prompt系列3. 凍結LM微調Prompt: Prefix-Tuning & Prompt-Tuning & P-Tuning解密
- CompletableFuture 的 20 個例子
- Media Query 在 CSS 中使用的一個具體例子CSS
- go select case的一個小坑Go
- [ Shell ] 兩個 case 實現 GetOptions 效果