2010-04-05 41 views
2

當Oracle估計某些查詢的「成本」時,它實際上是否查看錶中的數據量(行)?關於Oracle Explain計劃中成本的問題

例如:

如果我做員工的名字=「鮑勃」的全表掃描,它估計通過計算現有的行量的成本,或者是它總是一套成本是多少?

回答

3

在默認配置中,Oracle將檢查表統計信息(您可以通過查詢ALL_TABLES視圖查看 - 請參見列NUM_ROWS)。通常會定期運行Oracle作業以通過查詢部分或全部表來重新收集這些統計信息。

如果數據沒有被收集(還),優化器將(取決於optimizer_dynamic_sampling參數),以計算在該表中的行數估計這個表上運行一個快速簡單的查詢。 (更準確地說,掃描表格的成本不是從行數來計算的,而是從表格中的塊的數量(你可以在ALL_TABLESBLOCKS列中看到),它需要這個數字並將其除以與多塊讀取計數相關的因子以計算該部分計劃的成本。)

+0

+1用於提及動態採樣估計 – dpbradley 2010-04-06 12:36:21

4

成本優化程序使用段(表和索引)統計信息以及系統(CPU + I/O性能)統計信息來計算估算值。雖然它取決於數據庫的配置方式,但從10g開始,段統計信息通常由調用DBMS_STATS程序包的進程每天計算一次。