Heim >Datenbank >MySQL-Tutorial >Sollte ich IN oder ANY in PostgreSQL-WHERE-Klauseln verwenden?

Sollte ich IN oder ANY in PostgreSQL-WHERE-Klauseln verwenden?

DDD
DDDOriginal
2025-01-14 20:42:48920Durchsuche

Should I Use IN or ANY in PostgreSQL WHERE Clauses?

Verwenden Sie ANY anstelle von IN

in der WHERE-Klausel

Zusätzlich zur herkömmlichen IN-Klausel können Sie erwägen, ANY zu verwenden, um die Ergebnisse in der WHERE-Klausel zu filtern. PostgreSQL bietet zwei Syntaxvarianten:

IN-Ausdruck:

  • Ausdruck IN (Unterabfrage)
  • Ausdruck IN (Wert [, ...])

JEDER Ausdruck:

  • Ausdrucksoperator ANY (Unterabfrage)
  • Ausdrucksoperator ANY (Array-Ausdruck)

Während beide Methoden Unterabfragen verwenden können, unterscheidet sich ihre zweite Form in den Erwartungen.

Wie wählt man aus?

Bedenken Sie Folgendes:

  • ANY bietet mehr Flexibilität und kann mit jedem Binäroperator verwendet werden, der einen booleschen Wert zurückgibt.
  • IN ist ein Sonderfall von ANY und funktioniert wie = ANY.

In Bezug auf die Leistung ist es unwahrscheinlich, dass ANY wesentlich schneller ist als IN. Die Wahl zwischen beiden hängt hauptsächlich von der Bequemlichkeit der Bereitstellung gefilterter Werte ab.

Unterabfragemethode:

Wenn der Filterwert bereits in der Datenbank vorhanden ist, kann die Verwendung einer Unterabfrage oder das Verknüpfen der Quelltabelle mit der Zieltabelle die Effizienz verbessern.

Array-Methode:

Um die beste Leistung zu erzielen, stellen Sie große Zahlen vom Client über ein Array, unnest() oder einen Join bereit oder stellen Sie einen Tabellenausdruck mit VALUES bereit.

= BELIEBIGE Syntax:

Für Array-Ausdrücke akzeptiert PostgreSQL einen Array-Konstruktor (ARRAY[1,2,3]) oder ein Array-Literal ('{1,2,3}'). Zur Typsicherheit kann eine explizite Typkonvertierung verwendet werden:

<code class="language-sql">ARRAY[1,2,3]::numeric[]
'{1,2,3}'::bigint[]</code>

Übergabe eines Arrays von Ruby:

Um ein Array von Ruby zu übergeben, verwenden Sie die folgende Syntax:

<code class="language-ruby">MyModel.where('id = ANY(ARRAY[?]::int[])', ids.map { |i| i})</code>

Das obige ist der detaillierte Inhalt vonSollte ich IN oder ANY in PostgreSQL-WHERE-Klauseln verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn