用WITH…AS改寫標量子查詢
示例1:
示例2:
標量子查詢完勝!
點選(此處)摺疊或開啟
- select prod_id,
-
prod_name,
prod_list_price,
(select max(quantity_sold)
from sales s
where s.prod_id = p.prod_id
and s.time_id > p.prod_eff_from ) as max_quantity_sold,
(select max(amount_sold)
from sales s
where s.prod_id = p.prod_id
and s.time_id < p.prod_eff_to ) as max_amount_sold
from products p -
Plan hash value: 1097661653
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 72 | 3168 | 3 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 15 | | |
| 2 | TABLE ACCESS BY INDEX ROWID| SALES | 5455 | 81825 | 1512 (1)| 00:00:19 |
|* 3 | INDEX RANGE SCAN | SALES_PK | 982 | | 530 (1)| 00:00:07 |
| 4 | SORT AGGREGATE | | 1 | 15 | | |
| 5 | TABLE ACCESS BY INDEX ROWID| SALES | 5455 | 81825 | 1512 (1)| 00:00:19 |
|* 6 | INDEX RANGE SCAN | SALES_PK | 982 | | 530 (1)| 00:00:07 |
| 7 | TABLE ACCESS FULL | PRODUCTS | 72 | 3168 | 3 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("S"."PROD_ID"=:B1 AND "S"."TIME_ID">:B2)
filter("S"."TIME_ID">:B1)
6 - access("S"."PROD_ID"=:B1 AND "S"."TIME_ID"<:B2)
filter("S"."TIME_ID"<:B1)
點選(此處)摺疊或開啟
- WITH s2 AS
-
(select p.rowid as rid,
max(case
when s.time_id > p.prod_eff_from then
s.quantity_sold
END) AS max_quantity_sold,
max(case
when s.time_id < p.prod_eff_to then
s.amount_sold
END) AS max_amount_sold
from sales s
inner join products p on p.prod_id = s.prod_id
group by p.rowid)
select prod_id,
prod_name,
prod_list_price,
s2.max_quantity_sold,
s2.max_amount_sold
from products p
left join s2 on s2.rid = p.rowid
-
Plan hash value: 983752392
----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 7855K| 636M| 31653 (2)| 00:06:20 |
|* 1 | HASH JOIN OUTER | | 7855K| 636M| 31653 (2)| 00:06:20 |
| 2 | TABLE ACCESS FULL | PRODUCTS | 72 | 3384 | 3 (0)| 00:00:01 |
| 3 | VIEW | | 7855K| 284M| 31629 (2)| 00:06:20 |
| 4 | HASH GROUP BY | | 7855K| 322M| 31629 (2)| 00:06:20 |
|* 5 | HASH JOIN | | 7855K| 322M| 31408 (1)| 00:06:17 |
| 6 | TABLE ACCESS FULL| PRODUCTS | 72 | 1800 | 3 (0)| 00:00:01 |
| 7 | TABLE ACCESS FULL| SALES | 14M| 252M| 31365 (1)| 00:06:17 |
----------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("S2"."RID"(+)="P".ROWID)
5 - access("P"."PROD_ID"="S"."PROD_ID")
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22621861/viewspace-2077158/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 帶彙總的標量子查詢改寫
- MYSQL count標量子查詢改left joinMySql
- GreatSQL 最佳化技巧:將 MINUS 改寫為標量子查詢SQL
- 標量子查詢
- 標量子查詢(二)
- 標量子查詢(一)
- 用LEFT JOIN優化標量子查詢優化
- 標量子查詢優化(用group by 代替distinct)優化
- 都是標量子查詢惹的禍
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- Oracle常用抓取SQL-標量子查詢等OracleSQL
- mysql 標量子查詢和現金盤程式製作非法子查詢MySql
- 影響Oracle標量子查詢效能的三個因素Oracle
- 【TUNE_ORACLE】列出有標量子查詢的SQL參考OracleSQL
- 效能為王:SQL標量子查詢的優化案例分析SQL優化
- [20150709]慎用標量子查詢.txt
- [20200325]慎用標量子查詢.txt
- [20140125]關於標量子查詢.txt
- [20150727]使用標量子查詢小問題.txt
- [20180625]函式與標量子查詢13(補充)函式
- MySQL not in巢狀查詢改寫成外連線方式MySql巢狀
- 用Java寫股票查詢系統Java
- [20211220]關於標量子查詢問題.txt
- [20211214]18c標量子查詢unnest.txt
- [20180612]函式與標量子查詢10.txt函式
- [20180626]函式與標量子查詢14.txt函式
- [20180602]函式與標量子查詢3.txt函式
- 20180601]函式與標量子查詢2.txt函式
- [20180611]函式與標量子查詢9.txt函式
- [20180607]函式與標量子查詢8.txt函式
- [20180602]函式與標量子查詢4.txt函式
- 【書評:Oracle查詢優化改寫】第二章Oracle優化
- 遊標查詢
- 查詢重寫
- 【書評:Oracle查詢最佳化改寫】第二章Oracle
- 【書評:Oracle查詢優化改寫】第一章Oracle優化
- 【書評:Oracle查詢優化改寫】第三章Oracle優化
- 【書評:Oracle查詢優化改寫】第五至十三章Oracle優化