Heim >Datenbank >MySQL-Tutorial >Sollte ich für eine bessere Leistung „ANY' anstelle von „IN' in meinen SQL-Abfragen verwenden?
Verbesserung der SQL-Abfrageleistung: Vergleich und Anwendung von ANY
und IN
In SQL-Abfragen kann die Verwendung des Operators ANY
anstelle von IN
manchmal die Leistung optimieren. In diesem Artikel erfahren Sie, wie Sie die Konvertierung durchführen und wie Sie mit möglichen Fehlern umgehen.
Ursprüngliche Abfrage (mit IN
):
<code class="language-ruby">MyModel.where(id: ids)</code>
Äquivalente Abfrage (mit ANY
):
<code class="language-ruby">MyModel.where("id = ANY(VALUES(#{ids.join '),('}))")</code>
Fehlerbehandlung bei leerem Array:
Wenn ids
ein leeres Array ist, führt die Verwendung des ANY
-Operators zu einem Syntaxfehler. Stellen Sie daher vor der Verwendung von ANY
sicher, dass das Array nicht leer ist.
IN
und ANY
:
IN
-Operator gibt es in zwei Formen: Unterabfrage und Werteliste. Die ANY
-Operatoren sind ähnlich: Unterabfragen und Array-Ausdrücke.
Beachten Sie jedoch, dass es einen kleinen Unterschied in der zweiten Form dieser beiden Operatoren gibt: IN
erwartet eine Liste von Werten, während ANY
ein Array erwartet. Bei Verwendung der zweiten Form muss die Werteliste in ein Array umgewandelt werden.
IN
und ANY
:
IN
und ANY
können beide zum Vergleichen von Werten verwendet werden, ANY
ist jedoch flexibler und kann mehr Arten von Operatoren verarbeiten. IN
ist jedoch weiterhin gültig und die Interna können mit dem =
-Operator als Sonderfälle von ANY
umgeschrieben werden.
In Bezug auf die Leistung gibt es keinen signifikanten Unterschied zwischen IN
und ANY
. Für welches Sie sich entscheiden, hängt davon ab, was einfacher bereitzustellen ist: eine Werteliste oder ein Array. Wenn die zu verarbeitenden IDs bereits praktischerweise als Array bereitgestellt werden, ist die Verwendung von ANY
möglicherweise sinnvoller.
Arrays in Ruby übergeben:
Verwenden Sie in Ruby den Operator ANY
, um ein Array an eine PostgreSQL-Abfrage zu übergeben. Sie können die folgende Syntax verwenden:
<code class="language-ruby">MyModel.where('id = ANY(ARRAY[?]::int[])', ids.map { |i| i})</code>
Das obige ist der detaillierte Inhalt vonSollte ich für eine bessere Leistung „ANY' anstelle von „IN' in meinen SQL-Abfragen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!