Sql-Abfrage beschleunigen

ciberjoerg

Erfahrenes Mitglied
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.
PHP:
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?
 
Hallo,

bei Oracle gibt es 'hints' wie z.B. parallel. Keine Ahnung welches Datenbanksystem du benutzt und ob es das da auch gibt.
 
Brauchst du wirklich alle Daten? Ansonsten mit Unterabfragen die Datenmenge einschränken.
 
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
 
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.
 
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
 
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.....
 
Zurück