# Sql-Abfrage beschleunigen



## ciberjoerg (10. Juni 2010)

Ist es Möglich eine SQL abfrage zu beschleunigen? im Moment brauch ich Mit dieser Abfrage bisschen mehr als 5 sec. um die Werte aus der Datenbank zu holen.

```
SELECT
    li.nic AS usr_nic,
    li.user_id AS usr_id,
    uon.last_act AS activ,
    da.sex AS sex,
    da.agestamp AS age,
    da.hobbies AS hobbie,
    da.love AS lovelife,
    da.Vorname AS Vname,
    cty.Ort AS Ort
FROM
    fa_pass0_login AS li 
    JOIN u_on AS uon ON uon.user_id = li.user_id
    JOIN fa_pass0_data AS da ON da.user_id = li.user_id
    JOIN orte AS cty ON cty.PLZ = da.plz
ORDER BY 
li.user_id 
DESC LIMIT
10
```
Gibt es einen Schnelleren weg diese abfrage zu stellen?


----------



## FrankBooth (10. Juni 2010)

Hallo,

bei Oracle gibt es 'hints' wie z.B. parallel. Keine Ahnung welches Datenbanksystem du benutzt und ob es das da auch gibt.


----------



## Yaslaw (10. Juni 2010)

Brauchst du wirklich alle Daten? Ansonsten mit Unterabfragen die Datenmenge einschränken.


----------



## Alex_T (10. Juni 2010)

Hallöle,

im Notfall könnte man eine Abfrage mit _prepare_ auch vorbereiten, da Sie dann bei wiederholter Ausführung deutlich schneller ist.

kannst das ganze mal unter _prepare_ nachlesen...
Ansonsten würd ich mich Yaslaw anschließen.

Gruß Alex


----------



## ciberjoerg (10. Juni 2010)

Hab Grad mal ne abfrage ohne Ort gemacht dort ging die abfrage 0,0037sec.
Doch leider ist diese abfrage der Orte beinahe schon Pflicht.

Das Ergebnis der abfrage sieht im endefekt dann so aus:
Username >> status: Offline/Online
Vorname aus Ort (Alter)
Lovlife: Single/Vergeben/...
Hobbies: ...

Und meine Datenbank für die Orte hat Insgesamt 47,114 Zeilen.


----------



## Yaslaw (10. Juni 2010)

Hast ud auf dem Feld PLZ in der Tabelle Orte ein Index drauf?

ggf. auch ein Index auf PLZ & Orte. Da du nur diese 2 Felder brauchst, könnte mit einem Index ein Index-Scan durchgeführt werden anstelle eines Full-Table-Scans


----------



## Flex (10. Juni 2010)

Ich hab es mal ins Datenbankforum verschoben...


----------



## ciberjoerg (10. Juni 2010)

Auf PLZ und Ort ist eine index drauf, doch dadurch dauert es jetzt 17 sec Zum durchsuchen


----------



## Yaslaw (10. Juni 2010)

PLZ und Orte wechseln bekanntlich nicht sehr häufig. Darum ist das auch ein Fall wo man ggf auf die Normalizierung verzichten darf.

Sprich, in die Tabelle fa_pass0_data nimmst du das Feld 'Ort' mit auf. Beim Insert und Update kannst du üner einen Trigger dieses Feld anhand des PLZ abfüllen.

In Oracle würde man ev. mit Materialized Views arbeiten.....


----------



## ciberjoerg (10. Juni 2010)

Okay ich denk auch das dies die Beste Lösung Wäre. dann werde ich wohl Die Orte in die Daten mit aufnehmen.


----------

