關於查詢表資料,列與CPU開銷的計算
在效能最佳化藝術一書中看到:
Joze Senegacnik指出,從Oracle 10gR2開始,可以透過如下這個公式計算出訪問一個列的CPU開銷。
cpu_cost
= column_position * 20
公式:估算訪問一個列的CPU開銷跟這個列在表中的位置有關。這個公式給出了訪問一行所用的開銷。如果訪問多行資料,CPU開銷按比例增加(為什麼會增加,後續再研究~)。
下面一個實驗證明一下:
建立一張表t1,插入一行記錄,執行explain plan得到執行計劃,獲取依次取出第一列到第九列的CPU開銷。
SQL>
create table t1 (
2
c1 number,
3
c2 number,
4
c3 number,
5
c4 number,
6
c5 number,
7
c6 number,
8
c7 number,
9
c8 number,
10
c9 number);
Table created.
SQL> insert into t1 values (1,2,3,4,5,6,7,8,9);
1 row created.
SQL> explain plan set statement_id 'c1' for select c1 from t1;
SQL> explain plan set statement_id 'c2' for select c2 from t1;
SQL> explain plan set statement_id 'c3' for select c3 from t1;
SQL> explain plan set statement_id 'c4' for select c4 from t1;
SQL> explain plan set statement_id 'c5' for select c5 from t1;
SQL> explain plan set statement_id 'c6' for select c6 from t1;
SQL> explain plan set statement_id 'c7' for select c7 from t1;
SQL> explain plan set statement_id 'c8' for select c8 from t1;
SQL> explain plan set statement_id 'c9' for select c9 from t1;
SQL> select statement_id,cpu_cost as total_cpu_cost,
2
cpu_cost-lag(cpu_cost) over (order by statement_id) as cpu_cost_1_coll,
3
io_cost
4
from plan_table
5
where id=0
6
order by statement_id;
STATEMENT_ID
TOTAL_CPU_COST CPU_COST_1_COLL
IO_COST
------------------------------ -------------- --------------- ----------
c1
35757 3
c2
35777 20 3
c3
35797 20 3
c4
35817 20 3
c5 35837 20 3
c6
35857 20 3
c7
35877 20 3
c8
35897 20 3
c9
35917 20 3
9 rows selected.
請注意,初始讀取表資料的CPU開銷是35757,每往後面一列,CPU開銷加20。同時I/O開銷不變,這是因為所有列的資料基本儲存在同一個資料塊,全部查詢的物理讀的次數是一樣的。
摘錄、參考於Oracle效能診斷藝術
Ligle WANG
2011-11-10
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25834554/viewspace-710781/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於MySql資料庫設計表與查詢耗時分析MySql資料庫
- 關於MySQL 查詢表資料大小的總結MySql
- /*列轉行查詢表資料*/
- 關於快取與資料查詢次數的問題快取
- 關於dataguard需要查詢的資料字典
- MongoDB之資料查詢(關係運算)MongoDB
- MYSQL A、B表陣列關聯查詢MySql陣列
- 關於Oracle資料庫的時間查詢Oracle資料庫
- 關於資料字典的查詢效率優化優化
- 關於資料庫查詢業務的幾點思考資料庫
- 關於資料字典的查詢效率最佳化
- 關於資料庫批次查詢的一個想法資料庫
- ORACLE 系統統計資料和CPU開銷模型Oracle模型
- 資料庫基礎查詢--單表查詢資料庫
- Python—Django:關於在Django框架中對資料庫的查詢函式,查詢集和關聯查詢PythonDjango框架資料庫函式
- 關於SQL Server資料查詢基本方法的總結SQLServer
- 關於下拉選單查詢資料庫的問題資料庫
- 在EFCore中多對多關係的設計資料插入與查詢
- mysql查詢表的資料體積MySql
- MongoDB之資料查詢(陣列)MongoDB陣列
- 關於查詢不用重啟或者關閉資料庫的引數資料庫
- Excel查詢兩列資料相同的元素Excel
- MySQL關於根據日期查詢資料的sql語句MySql
- Oracle 查詢表與表之間的 主外來鍵關係Oracle
- 關於資料庫表的設計步驟資料庫
- 【EXP】備份複雜關聯查詢後的T表資料
- Mysql-基本練習(09-刪除單表記錄、查詢指定列資料、列的別名、簡單單表條件查詢、簡單分組查詢)MySql
- 資料庫中單表查詢資料庫
- 【資料庫】sql連表查詢資料庫SQL
- 查詢資料庫表是否存在資料庫
- 關於樹型結構資料遞迴查詢,轉非遞迴查詢的實現遞迴
- 海量資料相似度計算之simhash短文字查詢
- 資料庫設計與查詢語句的優化資料庫優化
- 查詢MySQL資料庫,MySQL表的大小MySql資料庫
- 關於dcat-admin 資料庫過濾查詢資料庫
- Mongodb 關聯表查詢MongoDB
- flink維表關聯絡列之Redis維表關聯:實時查詢Redis
- 鎖表的相關資訊查詢