Viele SELECTs auf einmal abschicken

mohammedomar

Benutzer
Beiträge
5
Hallo,

ich habe ein R-Programm, in dem ich sehr viele kleine SELECT-Abfragen durchführe. Dies führt dazu, dass das Programm auf Grund der Verzögerung, die durch die Kommunikation mit dem MySQL-Server entsteht, unnötig langsam wird.

Ich habe gelesen, dass man das Problem umgehen kann, indem man mehrere SELECT-Abfragen mit UNION ALL verbindet und so als eine Abfrage abschickt. Meine Frage ist nun, ob dies der beste Weg ist (insofern man nicht mit speziellen Lösungen wie Joins weiterkommt). Ich frage insbesondere, da ich annehmen würde, dies sei ein häufiger auftretendes Problem und daher würde MySQL spezielle Sprachelemente dafür zur Verfügung stellen. Dies gilt um so mehr, da ich, wenn ich mit UNION ALL arbeite, die Rückgabe wieder manuell aufdröseln müsste, um die Zeilen der Rückgabe den einzelnen SELECT-Abfragen zuzuordnen. Dies würde dann wohl auf irgendwelche Trennzeilen zwischen den einzelnen SELECT-Abfragen hinauslaufen, wenn ich sie mit UNION ALL verbinde.
 
Werbung:
UNION und UNION ALL hilft Dir nur, wenn die Ergebnissmengen vom Aufbau (Spalten, Datentypen) gleich sind.

Dies ist bei mir der Fall. In der Tat sind die Ergebnisse in der Regel trivial (1-spaltige Tabellen von Ganzzahlen).

Da Du R erwähnst: möglicherweise wäre ein Wechsel zu PostgreSQL für Dich sinnvoll, das kann im Kern der DB direkt R als Programmiersprache laufen lassen.

Danke für den Hinweis, ich behalte das im Hinterkopf. Allerdings greift bei mir auch noch Matlab-Code auf die DB zu.
 
Werbung:
Gut. Um das Problem zu beheben, daß man wissen will, woher die Daten kommen, kann man eine weitere Spalte im Result einzimmern:

Code:
test=# select 'erste abfrage' as quelle, 1 as data union all select 'zweite Abfrage', 2;
     quelle     | data
----------------+------
 erste abfrage  |    1
 zweite Abfrage |    2
(2 rows)

test=*#
 
Zurück
Oben