(gelöst) Optimierungsversuche an einer Abfrage
Verfasst: Di 31. Dez 2024, 11:21
Hallo!
Ich wollte eine Abfrage für eine einfache Kontakte-Liste mit Namen/Firmennamen und Rufnummer erstellen. Bei mir sind die Kontaktnummern in eine eigene Tabelle ausgelagert.
1. Versuch:
Ergebnis: Java-Heap-Space-Fehler, offenbar ist das zu speicherlastig.
2. Versuch:
Ergebnis: kein Java-Heap-Space-Fehler! Das ist schon mal gut, aber diese Optimierung hängt doch sehr vom Zufall ab. Ich will nur die Kontakte haben, die Telefonnummern sind, und die sind bei mir mit den IDs 0, 1 und 2 (Büro, privat, Handy) definiert. Höhere Nummern sind Fax und Mail usw. Wenn ich nicht zufällig die Telefonnummern auf die ersten drei IDs gelegt hätte, könnte ich BETWEEN nicht nutzen.
3. Versuch, diesmal mit JOIN:
Auch kein Java-Heap-Space-Fehler, weil offenbar das JOIN ökonomischer ist, als mit WHERE ganze Tabellen zu vergleichen.
4. und letzter Versuch, mit JOIN und Inanspruchnahme des zufälligen Glücks siehe 2.
Vielleicht fällt ja noch jemandem was Besseres ein. Ansonsten: Guten Rutsch!
Viele Grüße
Freischreiber
Ich wollte eine Abfrage für eine einfache Kontakte-Liste mit Namen/Firmennamen und Rufnummer erstellen. Bei mir sind die Kontaktnummern in eine eigene Tabelle ausgelagert.
1. Versuch:
Code: Alles auswählen
SELECT IFNULL( ' ' || "t-adressen"."Firma", '' ) || IFNULL( ' ' || "t-adressen"."Nachname", '' ) AS "Name", "t-kontakte"."Nummer" AS "Nummer" FROM "t-adressen", "t-kontakte"
WHERE "t-kontakte"."KontaktartID" = 0 OR "t-kontakte"."KontaktartID" = 1 OR "t-kontakte"."KontaktartID" = 2 AND "t-kontakte"."AdressID" = "t-adressen"."ID"
2. Versuch:
Code: Alles auswählen
SELECT IFNULL( ' ' || "t-adressen"."Firma", '' ) || IFNULL( ' ' || "t-adressen"."Nachname", '' ) AS "Name", "t-kontakte"."Nummer" AS "Nummer" FROM "t-adressen", "t-kontakte"
WHERE "t-kontakte"."KontaktartID" between 0 and 2 AND "t-kontakte"."AdressID" = "t-adressen"."ID"
3. Versuch, diesmal mit JOIN:
Code: Alles auswählen
SELECT IFNULL( ' ' || "t-adressen"."Firma", '' ) || IFNULL( ' ' || "t-adressen"."Nachname", '' ) AS "Name", "t-kontakte"."Nummer" AS "Nummer" FROM "t-adressen"
JOIN
"t-kontakte"
ON "t-kontakte"."AdressID" = "t-adressen"."ID"
WHERE "t-kontakte"."KontaktartID" = 0 OR "t-kontakte"."KontaktartID" = 1 OR "t-kontakte"."KontaktartID" = 2
4. und letzter Versuch, mit JOIN und Inanspruchnahme des zufälligen Glücks siehe 2.
Code: Alles auswählen
SELECT IFNULL( ' ' || "t-adressen"."Firma", '' ) || IFNULL( ' ' || "t-adressen"."Nachname", '' ) AS "Name", "t-kontakte"."Nummer" AS "Nummer" FROM "t-adressen"
JOIN
"t-kontakte"
ON "t-kontakte"."AdressID" = "t-adressen"."ID"
WHERE "t-kontakte"."KontaktartID" between 0 and 2

Viele Grüße
Freischreiber