Maison > base de données > tutoriel mysql > NVL vs COALESCE : quand l'efficacité l'emporte-t-elle sur la familiarité ?

NVL vs COALESCE : quand l'efficacité l'emporte-t-elle sur la familiarité ?

Patricia Arquette
Libérer: 2025-01-15 21:56:45
original
1004 Les gens l'ont consulté

NVL vs. COALESCE: When Does Efficiency Trump Familiarity?

Plongez en profondeur dans les différences entre NVL et COALESCE

La principale différence entre NVL et COALESCE réside dans le nombre de paramètres et le comportement d'évaluation, mais il existe quelques différences subtiles à noter. Contrairement à NVL, COALESCE est une fonction standard ANSI-92, tandis que NVL est une fonction propriétaire d'Oracle. Cependant, dans le cas de deux arguments, les deux fonctions se comportent exactement de la même manière.

La principale différence réside dans la manière dont ils sont mis en œuvre. NVL évalue tous les paramètres, qu'ils soient vides ou non. En comparaison, COALESCE est plus efficace car il arrête l'évaluation dès qu'il rencontre la première valeur non nulle.

Cette différence a des implications pratiques. Prenons l'exemple suivant :

<code class="language-sql">SELECT SUM(val)
FROM (
  SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
  FROM dual
  CONNECT BY level < 10000
)</code>
Copier après la connexion

NVL génère sans pitié des SYS_GUID pour les 10 000 itérations, ce qui entraîne des temps d'exécution des requêtes approchant la demi-seconde.

Maintenant, comparons COALESCE :

<code class="language-sql">SELECT SUM(val)
FROM (
  SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
  FROM dual
  CONNECT BY level < 10000
)</code>
Copier après la connexion

COALESCE reconnaît que 1 est une valeur non nulle et arrête d'évaluer le deuxième argument. Cela élimine la génération inutile de SYS_GUID et rend les requêtes presque instantanées.

En résumé, bien que NVL et COALESCE se ressemblent lorsqu'ils traitent deux valeurs, leurs différentes implémentations suggèrent que COALESCE offre une plus grande efficacité en évaluant sélectivement les paramètres en fonction du statut nul. Cette optimisation peut améliorer considérablement les performances des requêtes, en particulier dans les scénarios impliquant des évaluations complexes et itératives.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal