1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Viele SELECTs auf einmal abschicken

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von mohammedomar, 29 August 2018.

  1. mohammedomar

    mohammedomar Benutzer

    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.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    UNION und UNION ALL hilft Dir nur, wenn die Ergebnissmengen vom Aufbau (Spalten, Datentypen) gleich sind.

    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.

    Quick Intro to R and PL/R - Part 1 - Postgres OnLine Journal
     
  3. mohammedomar

    mohammedomar Benutzer

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

    Danke für den Hinweis, ich behalte das im Hinterkopf. Allerdings greift bei mir auch noch Matlab-Code auf die DB zu.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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=*#
    
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden