HSQLDB - Query optimieren

xanadoo

Erfahrenes Mitglied
Hallo zusammen, ich versuche eine Querey zu optimieren,
welche eigentlich nur eine Abfrage über 2 Tabellen macht.
Irgendwie bringe ich einfach keine schnelle Abfrage hin.

Fogende Situation:
(Es handelt sich in wirklichkeit natürlich um Andere Spalten, aber der Einfachheit halber habe ich diese mal umbenennt)

Tabelle A hat ca. 5'000 Einträge und die Spalten:
ID (PK)
Name
Vorname

Tabelle B hat ca. 10'000 Einträge und die Spalten:
ID (PK)
A_ID (FK)
Tel Nr
Art

Ich will mir nun alle Namen und Vornamen aus der Tabelle A anzeigen lassen,
welche in der Tabelle B einen in der Spalte Art einen Eintrag "Privat" haben.
Dies allerdings nur einmal, auch wenn eine Person mehrere Private Tel.Nr hätte.

Welches Query wäre dafür am geeignetsten?
Ich habe es mal wie auf folgende Arten versucht, jedoch dauerte die Ausführung fast 30 Sekunden, was ich als deutlich zu lange ansehe:

Code:
SELECT Name, Vorname
FROM A
WHERE ID IN 
(SELECT A_ID 
 FROM B
 WHERE Art LIKE 'Privat')

Code:
SELECT DISTINCT Name, Vorname
FROM A INNER JOIN B ON A.ID = B.A_ID
WHERE B.Art LIKE 'Privat'

Was könnte man an der Query denn schrauben, damit diese schneller wird?
 
Hallo,

  • 'LIKE' ist immer sehr teuer nehme den '=' Operator, der sollte schon für Geschwindigkeit
    sorgen
  • Wie ist denn die Tabelle Indiziert, evtl. hilft ein INDEX auf der Art-spalte
SQL:
CREATE INDEX idx_my ON table_b(ID, Art)

Hoffe es hilft.

Viele Grüße
 
Ich muss mit LIKE arbeiten,
das kommt in meinem Beispiel nicht richtig rüber.

Aber am Schluss ist die Abfrage dann:
WHERE upper(Art) LIKE '%VA%'

und das blöde upper(...) macht alles noch langsamer :(

Naja, dann werde ich wohl das DB Design überarbeiten müssen und ein paar Redundanzen einbauen.
Macht halt die DB Grösser, dafür laufen die Abfragen in zumutbaren Zeiten durch.
 
Zurück