ORACLE 12C : approx_count_distinct parameter

La funzione APPROX_COUNT_DISTINCT è stata aggiunta, ma non documentata, in Oracle 11g per migliorare la velocità di calcolo del numero di valori distinti quando si raccolgono statistiche utilizzando il pacchetto DBMS_STATS. Database Oracle 12c (12.1.0.2) ora include la funzione nella documentazione, quindi siamo liberi per usarlo nelle nostre applicazioni come funzione SQL supportata.

Restituisce un numero approssimativo di righe che contengono valori distinti di espressione.

È un’alternativa alla funzione COUNT (DISTINCT expr), che restituisce numero esatto di righe che contengono valori distinti di expr.

Per l’elaborazione di grandi quantità di dati è notevolmente più veloce di COUNT, con scostamento trascurabile dei valori dal risultato esatto.

La funzione APPROX_COUNT_DISTINCT () ignora i record che contengono un null valore per l’espressione. Inoltre esegue meno lavoro sullo smistamento e aggregazioni. Esegui e spiega il piano e puoi vedere le differenze.

In parte del materiale da Oracle la funzione APPROX_COUNT_DISTINCT () può essere più di 5 volte più veloce. Ma dipende dal numero di distinti valori e la complessità della query SQL.

Esempio
Supponi di avere una tabella caricata con 30 milioni di righe.

Facciamo un semplice test delle prestazioni:

set timing on
SELECT
COUNT(DISTINCT cp1),
COUNT(DISTINCT cp2),
COUNT(DISTINCT cp3)
FROM TEST_TABLE;
CP1        CP2        CP3
———- ———- ———-
3000       1000        100
Elapsed: 00:00:32.125
SELECT
APPROX_COUNT_DISTINCT(cp1),
APPROX_COUNT_DISTINCT(cp2),
APPROX_COUNT_DISTINCT(cp3)
FROM TEST_TABLE;
CP1       CP2       CP3
———- ———- ———-
2962       990        100
Elapsed: 00:00:04.368

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *