Maison >base de données >tutoriel mysql >Dois-je utiliser « ANY » au lieu de « IN » dans mes requêtes SQL pour de meilleures performances ?
Amélioration des performances des requêtes SQL : comparaison et application de ANY
et IN
Dans les requêtes SQL, l'utilisation de l'opérateur ANY
au lieu de IN
peut parfois optimiser les performances. Cet article explique comment effectuer la conversion et comment gérer les erreurs possibles.
Requête originale (en utilisant IN
) :
<code class="language-ruby">MyModel.where(id: ids)</code>
Requête équivalente (en utilisant ANY
) :
<code class="language-ruby">MyModel.where("id = ANY(VALUES(#{ids.join '),('}))")</code>
Gestion des erreurs de tableau vide :
Si ids
est un tableau vide, l'utilisation de l'opérateur ANY
provoquera une erreur de syntaxe. Par conséquent, avant d'utiliser ANY
, assurez-vous que le tableau n'est pas vide.
IN
et ANY
:
IN
se présente sous deux formes : sous-requête et liste de valeurs. Les opérateurs ANY
sont similaires : sous-requêtes et expressions de tableau.
Mais notez qu'il existe une légère différence dans la deuxième forme de ces deux opérateurs : IN
attend une liste de valeurs, tandis que ANY
attend un tableau. Lors de l'utilisation du deuxième formulaire, la liste de valeurs doit être convertie en tableau.
IN
et ANY
:
IN
et ANY
peuvent tous deux être utilisés pour comparer des valeurs, mais ANY
est plus flexible et peut gérer plus de types d'opérateurs. Cependant, IN
est toujours valide et les éléments internes peuvent être réécrits comme des cas particuliers de =
en utilisant l'opérateur ANY
.
En termes de performances, il n'y a pas de différence significative entre IN
et ANY
. Celui que vous choisissez dépend de ce qui est le plus facile à fournir : une liste de valeurs ou un tableau. Si les identifiants à traiter sont déjà fournis sous forme de tableau, l'utilisation de ANY
peut être plus appropriée.
Passer des tableaux dans Ruby :
Dans Ruby, utilisez l'opérateur ANY
pour passer un tableau à une requête PostgreSQL. Vous pouvez utiliser la syntaxe suivante :
<code class="language-ruby">MyModel.where('id = ANY(ARRAY[?]::int[])', ids.map { |i| i})</code>
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!