2012-10-24 39 views
1

我想執行它評估的線條和執行時間的數我的查詢之前。可能嗎?近似的行數和執行時間查詢

+0

DB引擎在執行前應該如何知道執行時間?與線條相同。數據庫需要執行以查找行。 –

+0

好吧,在執行查詢優化器查看統計信息並選擇執行計劃之前。我認爲它也可能估計查詢 – damluar

回答

4

查詢計劃可以告訴你優化估計多少行將返回(或修改),並優化了多久估計查詢將運行。因爲這些估計值與表格中的統計數據有關,但是,它們完全有可能是瘋狂的。

如果我參加一個簡單的查詢,但

SQL> explain plan for select count(*) from emp where deptno = 10; 

Explained. 

SQL> select * 
    2 from table(dbms_xplan.display); 

PLAN_TABLE_OUTPUT 
-------------------------------------------------------------------------------- 
Plan hash value: 2083865914 

--------------------------------------------------------------------------- 
| Id | Operation   | Name | Rows | Bytes | Cost (%CPU)| Time  | 
--------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT |  |  1 |  3 |  3 (0)| 00:00:01 | 
| 1 | SORT AGGREGATE |  |  1 |  3 |   |   | 
|* 2 | TABLE ACCESS FULL| EMP |  3 |  9 |  3 (0)| 00:00:01 | 
--------------------------------------------------------------------------- 

Predicate Information (identified by operation id): 

PLAN_TABLE_OUTPUT 
-------------------------------------------------------------------------------- 

    2 - filter("DEPTNO"=10) 

14 rows selected. 

甲骨文預計,EMP表的全表掃描,濾除所述行,其中deptno = 10將返回3行需要1秒(RowsTime來自查詢計劃的列與id = 2)。 Oracle預計在id = 1行上的COUNT(*)聚合可將其減少到1行。因此,在id = 0的行上,Oracle預計SELECT語句返回1行並運行1秒。

+0

謝謝你的整體時間和行。我們會對複雜的聯接進行評估嗎? – damluar

+1

@damluar - 我不確定問題是什麼。無論計劃中的步驟數是多少,該過程都是相同的。如果您只關心查詢的整體性能,則可以始終查看'id = 0'行。如果您有興趣分解各個步驟,則需要查看該步驟的信息。 –

+0

在我的情況下,它是OLAP查詢,加入了一些表格,所以我不確定Oracle是否可以提供更多或更少的體面評估。 – damluar