Howto rotate MySQL Columns to Rows, extract

Problem: Vergangenheitsinformationen und Zukunftsinformationen in getrennten Tabellen sollen in einer Ansicht zusammengefaßt werden, ohne persistierende Zwischenschicht und unter Beibehaltung der Indizierbarkeit. Tabelle A hält 6M Sätze, Tabelle B 100K. Beide Tabellen sind hot und deshalb würde eine persistierende Zwischentabelle eher schmerzen als nützen.

Ziel: Performanter, einheitlicher Live-Zugriff auf große Datenmengen mit nur einer Abfrage und ausschließen, dass jemand mit ineffizienten Abfragen den Server lahmlegt.

UNION

SELECT * FROM tblA
UNION
SELECT * FROM tblB
WHERE objectId=123;

  • Ergibt keinen Sinn, da „UNION“ dazu führt, dass alles in einer eigenen Speicher-Sandbox landet, sprich die Indizes funktionieren nicht mehr. Der Datenbank bleibt nicht anderes übrig, als alle Sätze zu durchlaufen.


(SELECT * FROM tblA WHERE objectId=123)
UNION
(SELECT * FROM tblB WHERE objectId=123)

  • OK, Indizes werden benutzt, aber wir wollen es ja live in einer View unterbringen, ohne dynamisch SQL-Queries zu schmieden.

JOIN


SELECT * FROM tblA JOIN tblB USING (objectid) WHERE objectId=123;

  • Möglich, aber führt zu sperrigem Ergebnis, da die Infos auf mehreren Spalten verteilt liegen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.