成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

DB2 優化器中如何使用分布統計信息?

數據庫
此文章主要和大家一起分享的是DB2 優化器中如何正確使用分布統計信息的實際操作步驟,以下就是對其實際操作步驟的描述。

本文講述的是在DB2 優化器中如何使用分布統計信息?我們大家都知道DB2 優化器是一種基于成本的優化器。它是根據表與實際操作索引的相關統計信息作出決策。DB2 在生成統計信息時,不但能提供基本統計信息,還允許創建所謂的分布統計信息。

本文解釋什么是分布統計信息、分布統計信息在哪些情況下尤為重要,以及應用程序開發人員應該考慮些什么,才能使 DB2 優化器創建有效的訪問計劃。

簡介

為了執行查詢或 DML 語句(INSERT、UPDATE、DELETE),DB2 必須創建一個訪問計劃(access plan)。訪問計劃定義按什么順序訪問表,使用哪些索引,以及用何種連接(join)方法來關聯數據。好的訪問計劃對于 SQL 語句的快速執行至關重要。DB2 優化器可以創建訪問計劃。這是一種基于成本的優化器,這意味著它是根據表和索引的相關統計信息來作出決策的。

DB2 在生成統計信息時,不但能提供基本統計信息,還允許創建所謂的分布統計信息。不但數據庫管理員要理解分布統計信息,而且應用程序開發人員也要理解分布統計信息。應用程序開發人員必須小心謹慎,因為在某些情況下分布統計信息對于 DB2 優化器來說非常重要。

主變量或參數標記(在 Java 中為 java.sql.PreparedStatement)的使用可能會造成阻礙,使優化器無法***限度地利用分布統計信息。本文解釋什么是分布統計信息、分布統計信息在哪些情況下尤為重要,以及應用程序開發人員應該考慮些什么,才能使 DB2 優化器創建有效的訪問計劃。

基本統計信息和分布統計信息

在研究分布統計信息之前,我們先來看看基本統計信息,只要執行 RUNSTATS 即可收集這些表的相關統計信息。

表的相關統計信息:

當前使用的頁面數

包含記錄行的頁面數

 

溢出的行數

 

表中的行數(基數)

 

對于 MDC 表,還有包含數據的塊(block)數

 

表中各列的相關統計信息:

 

列的基數

列的平均長度

 

列中第二大的值

 

列中第二小的值

 

列中 NULL 值的個數

 

通常,執行 RUNSTATS 時,不但可以收集到關于表的統計信息,而且還可以收集到相應的索引的相關統計信息。要了解為索引而收集的統計信息,請參閱 DB2 Administration Guide: Performance - Statistical information that is collected。

 

觀察一個表的基本統計信息,您可以看到,DB2 優化器知道一個表由多少行組成(表的基數),以及一個列包含多少個不同的值(列的基數)。但是,還有一些信息是基本統計信息無法提供的。例如,基本統計信息不能告訴優化器一個列中某些值出現的頻率。假設表 TABLE_X 有大約 1,000,000 行,在該表上執行這樣一條查詢:

SELECT * FROM TABLE_X WHERE COLUMN_Y = 'VALUE_Z'

難道 DB2 優化器知道 TABLE_X 中有多少行滿足條件 COLUMN_Y = 'VALUE_Z' 不重要嗎?換句話說:知道這個查詢將返回 1 行、100 行、1000 行還是 10000 行有什么不好呢?

實際上,通過基本統計信息,DB2 優化器只能估計 'VALUE_Z' 在 COLUMN_Y 中出現的頻率。在這種情況下,優化器認為所有值在 COLUMN_Y 中是平均分布的,這意味著它認為所有的值都有相同的出現頻率。如果事實碰巧如此,這樣估計并無大礙。但是,如果有些值比其他值出現得更頻繁一些(例如,如果 'VALUE_Z' 出現 900,000 次,即占所有行的 90%)。

那么DB2 優化器不能考慮到這一點,因而生成的訪問計劃就不是***的。而分布統計信息可以填補這一空白。分布統計信息可以提供關于數據出現頻率及其分布情況的信息,如果數據庫中存儲了很多重復值,并且數據在表中并非平均分布的時候,分布統計信息對于基本統計信息是一個重要的補充。

分布統計信息的類型 —— 頻率(frequency)統計信息和分位數(quantile)統計信息

有兩種不同類型的分布統計信息 —— 頻率統計信息和分位數統計信息。讓我們通過一個示例表來研究一下這兩種不同類型的分布統計信息。

示例表 “CARS” 表示一家汽車制造商,對于生產的每一輛汽車,在表中都有相應的一行。每輛汽車可以由它的 ID 來標識,因此 “ID” 是表 “CARS” 的主鍵(PK)。此外,表中有一個 “STATE” 列,表明汽車當前處在制造流程中的哪一步。一輛汽車的制造流程從第 1 步開始,然后是第 2 步、第 3 步,...、第 49 步、第 50 步、第 51 步、...、第 98 步、第 99 步。

一直到第 100 步 —— 第 100 步意味著汽車已經完工了。已完工的汽車所對應的行仍然保留在表中,后續流程(例如投訴管理、質量保證等)仍要用到這些行。汽車制造商生產 10 種不同型號(“TYPE” 列)的汽車。為了簡化問題,在這個示例表中,各種汽車型號命名為 A、B、C、D、...、J。除主鍵索引(在 “ID” 列上)之外。

“STATE” 列上也有一個索引(“I_STATE”),在 “TYPE” 列上還有一個索引(“I_TYPE”)。實際上,一個 “CARS” 表包含的列遠不止 “ID”、“STATE” 和 “TYPE”。為簡單起見,示例表中沒有出現其他這些列。

頻率統計信息

假設表 CARS 現在有大約 1,000,000 條記錄,不同的型號在表中出現的頻率如下所示:

表 1. 表 CARS 中 TYPE 列的頻率統計信息

 

 

  1. TYPE COUNT(TYPE)   
  2. A 506135   
  3. B 301985   
  4. C 104105   
  5. D 52492   
  6. E 19584   
  7. F 10123   
  8. G 4876   
  9. H 4589   
  10. I 4403   
  11. J 3727 

 

 

型號為 A 的汽車最受購買者的青睞,因此生產的汽車中大約有 50% 是這種型號。型號 B 和型號 C 僅次于型號 A ,分別占所有汽車的 30% 和 10%。其他所有型號加在一起僅占 10%。

上面的表顯示了 “TYPE” 列的頻率統計信息。通過基本統計信息,DB2 優化器只能了解到該表包含 1,000,000 行(表的基數)和 10 種不同的值(型號),即 A 到 J。如果沒有分布統計信息,優化器會認為每種值以相同的頻率出現,大約都是出現 100,000 次。

而一旦生成了關于 “TYPE” 列的分布統計信息,優化器即可了解每種型號真正的出現頻率。因此,DB2 優化器清楚各種已有型號出現的不同頻率。

優化器使用頻率統計信息來計算用于檢查相等或不等的謂詞的過濾因子。例如:

 

  1. SELECT * FROM CARS WHERE TYPE = 'H' 

分位數統計信息

與頻率統計信息不同,分位數統計信息與不同值的出現頻率無關,而與一個表中有多少行小于或大于某個值(或者有多少行介于兩個值之間)相關。分位數統計信息提供關于一個列中的值是否聚合的信息。為獲得這樣的信息,DB2 假定列中的值是按升序排列的,并根據正則行間隔確定相應的值。

我們來看看表 CARS 中的 “STATE” 列,該列按升序排列。根據正則行間隔,即可確定 “STATE” 的對應值。

表 2. CARS 表中 STATE 列的分位數統計信息

 

 

  1. COUNT(row) STATE ASC   
  2. 5479 1   
  3. 54948 10   
  4. 109990 21   
  5. 159885 31   
  6. 215050 42   
  7. 265251 52   
  8. 320167 63   
  9. 370057 73   
  10. 424872 84   
  11. 475087 94   
  12. 504298 100   
  13. ... 100   
  14. 1012019 100 

 

 

由于已完工的汽車仍然沒有從表中刪除,因此狀態為 100 (=完工)的汽車數量比所有處于其他狀態的汽車總和還多。已完工的汽車占表中所有記錄的 50%。

注意: 在實際情況下,已完工的汽車數量甚至還要更多(例如超過 99%)。在后文中的具體例子中可看到這種情況。

上表顯示了 “STATE” 列的分位數統計信息。有了這種關于有多少行分別小于和大于確定值的信息,優化器即可計算出用于測試小于(小于等于)、大于(大于等于)或介于兩值之間的謂詞的過濾因子。例如:

 

  1. SELECT * FROM CARS WHERE STATE < 100 
  2. SELECT * FROM CARS WHERE STATE BETWEEN 50 AND 70  

 

根據已有的分位數統計信息計算出來的過濾因子不是很精確,但即使只收集 20 個值,其誤差仍然低于 5%。

完整內容的學習,請訪問:

http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0606fechner/

【編輯推薦】

  1. DB2數據庫雙機的正確安裝流程描述
  2. 對DB2 實現split的操作流程描述
  3. JDBC連接DB2數據庫的“捷徑”
  4. IBM DB2 Catalog如何正確應用?
  5. DB2連接端口不能啟動這一問題的殲滅

 

責任編輯:佚名 來源: css-board.cn
相關推薦

2010-08-20 11:16:39

DB2 優化器

2010-08-13 14:32:13

DB2 優化器

2010-09-01 10:38:47

DB2統計信息

2010-08-31 15:08:14

DB2INSERT優化

2011-03-21 09:51:04

DB2性能優化

2010-08-16 17:07:43

DB2 trc

2012-08-01 14:23:35

IBMdW

2010-11-04 15:43:49

DB2數據統計與分析系

2010-11-04 15:39:40

DB2 SQL語句

2010-08-05 15:48:14

DB2強制優化器

2010-09-06 16:16:20

DB2 優化器

2010-08-10 17:33:42

DB2 優化器

2010-08-17 16:13:32

DB2 并行版本

2010-09-30 15:17:17

DB2信息目錄

2010-08-20 09:44:51

DB2確定某個表

2010-08-20 09:44:51

DB2確定某個表

2010-09-06 14:39:06

DB2 9

2010-08-20 09:44:51

DB2確定某個表

2010-09-30 13:27:09

DB2游標

2011-01-20 10:15:22

ibmdwDB2
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产二区精品视频 | 久久综合国产 | aaaaa毛片 | 日韩成人av在线 | 丁香一区二区 | 日韩一区欧美一区 | 老牛嫩草一区二区三区av | 精品网| 欧美日韩在线视频一区 | 欧美在线一级 | 成人性视频免费网站 | 狠狠干网站 | 国产成人精品高清久久 | 日日爱av | 99国内精品久久久久久久 | 久久亚洲欧美日韩精品专区 | 久久久精彩视频 | 国产一级精品毛片 | 伊人春色在线 | 中文字幕在线看第二 | 久草.com | 手机av在线| 免费视频一区 | 久久综合欧美 | 欧日韩在线观看 | 岛国毛片在线观看 | 日本在线免费看最新的电影 | 九九久久99 | 欧洲一区二区三区 | 国产精品久久久久久久久久东京 | 国产高清免费视频 | 欧美一区二区三区久久精品 | 精品三级在线观看 | 久久久www| 免费在线成人网 | 人人爱干 | 亚洲第一网站 | 久草在线在线精品观看 | 四季久久免费一区二区三区四区 | 成人h动漫亚洲一区二区 | 中文字幕亚洲视频 |