Trouver efficacement des éléments de tableau dans PostgreSQL
Dans PostgreSQL 9.0 et versions ultérieures, vérifier si une valeur existe dans un tableau peut être un défi. Cet article présente trois méthodes pour résoudre ce problème :
1. Intersection du tableau :
<code class="language-sql">select '{1,2,3}'::int[] @> (ARRAY[]::int[] || value_variable::int)</code>
Cette méthode ajoute la valeur à un tableau vide, puis la croise avec le tableau d'origine. Si la valeur existe, le résultat est vrai.
2. Comparaison de tableaux :
<code class="language-sql">select '{1,2,3}'::int[] @> ARRAY[value_variable::int]</code>
Il s'agit d'une méthode simplifiée qui compare le tableau d'origine à un tableau à un seul élément contenant la valeur. Si le résultat est vrai, la valeur existe dans le tableau d'origine.
3. TOUTE structure :
<code class="language-sql">SELECT value_variable = ANY ('{1,2,3}'::int[])</code>
TOUTE construction permet une solution plus propre. Il teste si la valeur correspond à un élément de la collection représentée par le tableau.
Considérations relatives aux performances :
Lorsque vous utilisez des tableaux PostgreSQL pour manipuler des expressions, veillez à prendre en compte l'impact sur les performances. Les opérateurs de tableau (par exemple, @>) sont optimisés pour être utilisés avec les index GIN ou GiST. Cependant, la construction ANY est utilisée avec les index B-tree pour les expressions d'index sur l'opérande de gauche. Donc, pour une efficacité maximale, assurez-vous que l'opérande gauche de ANY (value_variable
dans ce cas) est indexé.
Gestion des valeurs nulles :
Veuillez noter qu'aucune de ces méthodes ne fonctionne sur les éléments NULL. Pour vérifier les valeurs NULL dans un tableau, veuillez vous référer aux ressources supplémentaires fournies dans la section réponse de la question.
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!