Heim >Datenbank >MySQL-Tutorial >Kann UNION ALL mit LIMIT 1 sequentielle Abfragen effizient simulieren?

Kann UNION ALL mit LIMIT 1 sequentielle Abfragen effizient simulieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-04 14:59:45686Durchsuche

Can UNION ALL with LIMIT 1 Efficiently Simulate Sequential Queries?

Sequentielle selektive Abfragen mit UNION ALL

Problem:
Suche nach einer einzelnen Zeile in einer Datenbanktabelle mit schrittweise reduzierte Suchkriterien. Zum Beispiel:

SELECT * FROM image WHERE name LIKE 'text' AND group_id = 10 LIMIT 1

Wenn kein Ergebnis erhalten wird, führen Sie Folgendes aus:

SELECT * FROM image WHERE name LIKE 'text' LIMIT 1

Wenn immer noch kein Ergebnis, ausführen:

SELECT * FROM image WHERE group_id = 10 LIMIT 1

Kann dieser Vorgang mit einem einzigen ausgeführt werden? Ausdruck?

Lösung:

SELECT * FROM image WHERE name = 'name105' AND group_id = 10
UNION ALL
SELECT * FROM image WHERE name = 'name105'
UNION ALL
SELECT * FROM image WHERE group_id = 10
LIMIT 1;

Erklärung:

  • UNION ALL fasst die Ergebnisse mehrerer SELECT-Anweisungen in einer einzigen Tabelle zusammen.
  • Die LIMIT-Klausel gibt nur das an Die erste Zeile des kombinierten Ergebnisses sollte zurückgegeben werden.
  • Indizes für (name, group_id) und (group_id) sind entscheidend für die Leistung.
  • Diese Abfrage ist besonders effizient, da PostgreSQL den Ausführungsplan optimiert um die Verarbeitung weiterer SELECT-Anweisungen zu beenden, sobald das LIMIT erfüllt ist.

Generisch Lösung:

Der obige Ansatz kann für eine beliebige Anzahl von Suchparametern verallgemeinert werden, indem der UNION ALL-Kette zusätzliche SELECT-Anweisungen hinzugefügt werden.

Überlegungen zu sortierten Ergebnissen:

Da die LIMIT-Klausel für das gesamte Ergebnis gilt, ist die Sortierung nicht besonders sinnvoll, da nur die erste Zeile berücksichtigt wird zurückgegeben.

Das obige ist der detaillierte Inhalt vonKann UNION ALL mit LIMIT 1 sequentielle Abfragen effizient simulieren?. 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