Database Reference
In-Depth Information
SQL> insert into t1 select mod(level,20) + 30000, level, level, level from dual connect by
level <= 30000;
30000 rows created.
SQL> commit;
Commit complete.
SQL> exec :b1:=5 + 30000;
PL/SQL procedure successfully completed.
SQL> select count(b) from t1 where a >= :b1;
COUNT(B)
----------
22500
SQL> select plan_table_output from table (sys.dbms_xplan.display_cursor('','','ALLSTATS
LAST'));
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
------------------
SQL_ID 4fxwhyjs9pqs6, child number 0
-------------------------------------
select count(b) from t1 where a >= :b1
Plan hash value: 720960414
----------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers
|
----------------------------------------------------------------------------------------------
-
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.26 | 1654
|
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.26 | 1654
|
| 2 | TABLE ACCESS BY INDEX ROWID| T1 | 1 | 1 | 22500 |00:00:00.20 | 1654
|
|* 3 | INDEX RANGE SCAN | I_T1 | 1 | 1 | 22500 |00:00:00.07 | 154
|
----------------------------------------------------------------------------------------------
-
L.: „ Diesmal schätzt der Optimizer die Kardinalität sehr optimistisch und setzt aus diesem
Grund den Index Range Scan mit dem Tabellenzugriff über die ROWID im Ausführungsplan
ein. Man kann sich sicherlich andere Beispiele ausdenken, bei denen die Performanz sich
wesentlich stärker als im obigen Beispiel verschlechtert, wenn die Spaltenwerte außerhalb der
Histogramme liegen.
P.: „ Was macht man, um solche Situationen zu vermeiden?
L.: „ Man muss entweder häufiger die jeweiligen Optimizer-Statistiken bzw. die Histo-
gramme erstellen ( alternativ kann man Dynamic Sampling einsetzten ) oder gar auf die His-
togramme verzichten.
P.: „ Kann man auf die Histogramme ohne Performanz-Verschlechterung verzichten?
L.: „ Wenn die Spaltenwerte mehr oder weniger gleichmäßig verteilt sind, kann man das
eventuell tun. In jedem Fall muss man aber ausführliche Tests durchführen, bevor man diese
Entscheidung trifft. Ich habe noch eine Frage an Dich. Wenn die Daten in eine Tabelle zyk-
lisch eingetragen und nach einer Bearbeitung wieder gelöscht werden, können die Optimizer-
Search WWH ::




Custom Search