/ / Приблизителен брой редове и време за изпълнение на заявка - база данни, oracle

Приблизителен брой редове и време за изпълнение за заявка - база данни, оракул

Бих искал да преценя броя на редовете и времето за изпълнение на моята заявка преди изпълнение. Възможно ли е?

Отговори:

4 за отговор № 1

Планът за заявка може да ви покаже колко редовепрогнозите за оптимизатора ще бъдат върнати (или променени) и колко дълго оптимизаторът оценява заявката. Тъй като тези оценки са обвързани, наред с други неща, със статистическите данни на таблиците, обаче, напълно е възможно те да са диви неправилни.

Ако обаче вземам прост въпрос

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.

Oracle очаква пълно сканиране на таблицата EMP таблица, филтрирайки редовете къде deptno = 10 ще се върне 3 реда и ще отнеме 1 секунда ( Rows и Time колони от плана за заявка за реда с id = 2). Oracle очаква COUNT(*) агрегиране в реда с id = 1 за да намалите това до 1 ред. Така че, на ред с id = 0, Oracle очаква SELECT заявление да се върне 1 ред и да се изпълни за 1 секунда.