APPROX_COUNT_DISTINCT |
Compteur approximatif distinct |
| Oracle Database SQL |
Oracle 12c Release 2 (12.2) ou supérieure |
Syntaxe
|
APPROX_COUNT_DISTINCT(expr)
|
Paramètres
| Nom |
Description |
| expr |
Ce paramètre permet d'indiquer l'expression ou la colonne sur laquelle le calcul du nombre de valeurs distinctes approximatif doit être effectué. Il peut s'agir de n'importe quelle expression scalaire (exemple nom de colonne, fonction, opération,...). |
Description
Cette fonction permet d'estimer le nombre de valeurs distinctes d'une colonne, avec une précision raisonnable et un coût inférieur à la fonction COUNT(DISTINCT ...).
Remarques
- Remplacement performant de COUNT(DISTINCT) : Cette fonction est une alternative plus rapide à COUNT(DISTINCT expr) dans les requêtes sur de larges
volumes. Elle utilise un algorithme d'estimation (comme HyperLogLog) pour éviter de stocker tous les éléments distincts en mémoire.
- Idéale pour les gros ensembles de données : Lorsque les volumes de données sont massifs (millions ou milliards de lignes), APPROX_COUNT_DISTINCT permet
d'obtenir des résultats en quelques secondes, contre plusieurs minutes pour la version exacte, avec un taux d'erreur négligeable.
- Gain considérable en consommation mémoire : L'utilisation d'un algorithme probabiliste permet de limiter l'utilisation mémoire à une fraction de celle
requise par les fonctions exactes. Cela permet des analyses simultanées sur plusieurs colonnes distinctes sans surcharger le système.
- Précision configurable indirectement via d'autres fonctions : Bien que la fonction elle-même ne dispose pas de paramètre de précision, Oracle propose
d'autres fonctions comme APPROX_COUNT_DISTINCT_AGG ou DETAIL pouvant s'insérer dans des flux contrôlés de précision ou d'agrégation.
- Résultat non déterministe par défaut : La valeur retournée peut varier légèrement entre deux exécutions si les données changent ou si l'algorithme utilise
une graine aléatoire. Cela peut gêner dans certains rapports où la stabilité du chiffre est attendue.
- Utilisable dans des clauses GROUP BY : Cette fonction est totalement compatible avec les agrégations classiques. Elle peut donc être utilisée pour estimer
le nombre de clients distincts par région, produit distinct par mois, etc., avec un gain de performance très net.
- Ne remplace pas COUNT(DISTINCT) dans tous les cas : Si une précision absolue est requise, comme dans des audits, bilans ou processus de facturation, cette
fonction ne doit pas être utilisée. Elle s'adresse aux contextes analytiques, exploratoires ou agrégés à grande échelle.
- Supportée depuis Oracle 12c : Cette fonction est disponible à partir d'Oracle Database 12c. Elle s'inscrit dans une série d'améliorations orientées
vers l'analyse rapide des Big Data, sans modification majeure de la syntaxe SQL traditionnelle.
Dernière mise à jour : Dimanche, le 29 Juin 2025