為DB進行collect statistics時,除了根據過往的經驗外,在Teradata中其實是可以讓個engine 給點提議的
要讓engine 為你提供要collect的選擇,首先需要執行以下statement
之後再EXPLAIN 一下要行的sql
在explain 完個execution plan 後的地方就會出現到Engine 為你提議要collect statistics 的地方
根據Engine 的提議執行完COLLECT STATISTICS後,再EXPLAIN個plan一次,就會發現預計的時間快了不少呢!
DIAGNOSTIC HELPSTATS ON FOR SESSION;
之後再EXPLAIN 一下要行的sql
EXPLAIN SEL * FROM tableA a INNER JOIN tableB b ON a.ref_cd = b.ref_cd
LEFT OUTER JOIN tableC c ON a.serv_cd = c.serv_cd
LEFT OUTER JOIN tableD d ON a.row_id = d.row_id AND CAST('20141101' AS DATE FORMAT 'yyyymmdd') BETWEEN d.start_date AND d.end_date
WHERE event_date = CAST('20141101' AS DATE FORMAT 'yyyymmdd')
在explain 完個execution plan 後的地方就會出現到Engine 為你提議要collect statistics 的地方
10) Finally, we send out an END TRANSACTION step to all AMPs involved
in processing the request.
-> The contents of Spool 1 are sent back to the user as the result of
statement 1. The total estimated time is 1 minute and 12 seconds.
BEGIN RECOMMENDED STATS ->
11) "COLLECT STATISTICS tableA COLUMN EVENT_DATE".
(HighConf)
12) "COLLECT STATISTICS tableA COLUMN ROW_ID".
(HighConf)
13) "COLLECT STATISTICS tableA COLUMN SERV_CD".
(HighConf)
14) "COLLECT STATISTICS tableA COLUMN REF_CD".
(HighConf)
<-END RECOMMENDED STATS
根據Engine 的提議執行完COLLECT STATISTICS後,再EXPLAIN個plan一次,就會發現預計的時間快了不少呢!
10) Finally, we send out an END TRANSACTION step to all AMPs involved
in processing the request.
-> The contents of Spool 1 are sent back to the user as the result of
statement 1. The total estimated time is 21.37 seconds.

0 回應:
Post a Comment