Archiv

Artikel getaggt mit ‘sql’

MySQL – Unterabfragen vs. temporäre Tabellen

Juni 7, 2009 4 Kommentare

Bei der Erstellung von Datenbankabfragen mit SQL kommt man bei der Auswertung vieler Daten sellten mit einer einfachen Abfrage aus. Oft benötigt man eine Ausgabemenge, welche als Argumente einer weiteren Abfrage dienen soll. Für diese Zwecke eignen sich verschachtelte Abfragen die aufeinander aufbauen und mit einem Mal die gewünschte Ausgabe erzeugen können.

Leider reicht nicht immer die Leistung des Datenbankservers für eine komplexe Unterabfrage aus und man wartet ewig auf seine Ausgabemenge. Der Grund für dieses Problem liegt auf der Hand. Durch die aufeinander aufbauenden Abfragen wird viel Arbeitsspeicher benötigt. Reicht der Speicher für die Komplexität nicht aus, ist der Server momentan überlastet oder ist er nicht optimal konfiguriert, wird die Abarbeitung deutlich ausgebremst.

Um die Ressourcen des Server zu schonen kann man temporäre Tabellen anlegen und die Ausgabemenge einer einzelnen Abfrage vorübergehend in dieser Tabelle speichern. Diese Logik kann auf eine beliebig komplexe Unterabfrage angewendet werden, wobei der Datenbankserver immer nur mit der Abarbeitung einer einelnen Abfrage belastet wird.

Um sich die Erzeugung dieser temporären Tabellen durch DDL Statements zu sparen, kann man es MySQL überlassen den richtigen Aufbau der Tabelle zu wählen. Hierzu verbindet man eine CREATE- mit einer SELECT-Anweisung.

Hier ein Beispiel:

CREATE TABLE temptablename1 SELECT * FROM
  tablename1 i WHERE ...;

CREATE TABLE temptablename2 SELECT * FROM
  temptablename1 i, tablename1 j WHERE ...;

SELECT * FROM tablename1 i WHERE 1 <=
  (SELECT COUNT(*) FROM temptablename2 u WHERE u.attribute1=i.attribute1);
Kategorien:Informatik Schlagworte: ,
Follow

Bekomme jeden neuen Artikel in deinen Posteingang.