2013-05-21 16 views
7

的統計數據,Teradata的我可以使用如下語句......利用收集的Teradata

collect statistics on my_table column(col1) 

這將收集表上的統計數據,並將它們存儲在DBC的觀點一樣ColumnStats,IndexStats和MultiColumnStats。我也有一種印象,優化器(解析引擎)會在可用時找到統計信息,並使用它們而不是估計的表基數/索引值計數來更好地決定如何執行查詢。

這一切聽起來不錯,但我有一些問題。

  • 使用collect stats有什麼不利嗎?
  • 什麼時候在您的SQL腳本中使用collect統計信息是合適/不適當的?
  • 收集已編入索引的字段的統計信息有哪些性能優勢?
  • 爲(表,易失性表)統計存儲多長時間?
  • 任何其他意見有關collect statistics將不勝感激。
+0

很抱歉,但IMO這個問題不是一個「般配」這麼久。收集統計數據是Teradata的一個非常重要的部分,也有很多在線文章討論這個問題。此外,您對這個問題有太多不同的部分需要清楚回答。任何一顆子彈都值得再次問。投票結束爲「不具建設性」。 – BellevueBob

+0

嘿鮑勃你認爲它會更適合將問題遷移到數據庫管理員SO站點,而不是投票「不建設性」嗎?我找到了文章,但沒有真正解決我的問題(S) – ChrisCamp

回答

10

1>使用收集統計有什麼不利嗎?

是的,收集統計信息本身非常耗時,它實際上是從AMPS中查找數據並將統計信息插入字典表中。

假設你有一個表的定義,如:

CT T1(X1 INT,Y1 INT,Z1 INT);

該表包含數百萬行,並且從未在ST /連接條件中使用z1,因此不值得收集z1上的統計數據。

2>在您的SQL腳本中使用collect統計信息時適合/不適當?

已經在上面回答了。如果某個列將用作ST/Join條件.i.e的where或on子句,則必須收集統計信息,否則不需要。

3>在已編入索引的字段上收集統計信息的性能優勢是什麼?

ct t1(x1 int,y1 int)primary index(x1);

用於像sel * from t1這樣的簡單查詢,其中x1 = 5;

將展示收集統計數據的有用性。

怎麼樣?

優化程序可以正確估計此查詢將選擇多少行,如果t1將與t2連接,優化程序將選擇有效的連接。

4>統計信息存儲在(表,易失性表)中多久?

表:永久性。

易變表:直到會話過期。

5>有關收集統計的任何其他意見,將不勝感激。

沒有關於多列統計的討論。

說,查詢是這樣的:

SEL *從t1加入T2上Y1 = Y2和X1 = 2;

然後在(x1,y1)上收集多列統計數據將對優化非常有幫助。

此外,如果表人口已經改變(行數增加),則必須考慮重新收集統計

+0

嘿有用戶,我欣賞想出來的迴應 – ChrisCamp

相關問題