Avatar billede razmuz_dk Nybegynder
09. september 2005 - 12:07 Der er 4 kommentarer og
1 løsning

Muligt at optimere her?

Her ser i en forkortet udgave af sql-kald jeg kører på mit website:
SELECT
    t.noget,
    s.navn,
    b.brugernavn,
    b2.brugernavn AS brugernavn2
FROM
    transfers AS t,
    spillere AS s,
    brugere AS b,
    brugere AS b2
WHERE
    s.spiller_id = t.spiller_id AND
    b.bruger_id = t.bruger_til AND
    b2.bruger_id = t.bruger_fra
ORDER BY t.id DESC
LIMIT 20

Kaldet tager ofte 4-5 sekunder hvilket er utilfredsstillende.

Jeg har sat alle rigtige indexes på. Hvis jeg fjerner "ORDER BY" kommandoen tager kaldet ca. 0.2 sekunder.

Kan det på  nogen måde optimeres så det kører hurtigere?

- Rasmus
Avatar billede arne_v Ekspert
09. september 2005 - 12:22 #1
Du har index på alle 5 felter du joiner på ?

Hvor mange records ville den returnere uden LIMIT 20 ?

Hvordan ser det ud med memory på serveren ?
Avatar billede razmuz_dk Nybegynder
09. september 2005 - 13:11 #2
Har index på alle 5 ja. Uden limit ville den returnere lige så mange som der er i tabellen transfers = 160991 records.

Der er 500 mb ubrugt ram (memory?) på serveren.
Avatar billede kjulius Novice
10. september 2005 - 15:04 #3
Jeg går ud fra, at feltet Id i tabellen transfers er PRIMARY KEY?

Prøv at sætte et Force index på:

SELECT
    t.noget,
    s.navn,
    b.brugernavn,
    b2.brugernavn AS brugernavn2
FROM
    transfers AS t FORCE INDEX(id),
    spillere AS s,
    brugere AS b,
    brugere AS b2
WHERE
    s.spiller_id = t.spiller_id AND
    b.bruger_id = t.bruger_til AND
    b2.bruger_id = t.bruger_fra
ORDER BY t.id DESC
LIMIT 20

Du kan først bruge FORCE INDEX på MySQL fra version 4.0.9, ellers kan du prøve med USE INDEX (som kan bruges fra version 3.23.12) i stedet.
Avatar billede kjulius Novice
10. september 2005 - 15:15 #4
Har du et index på id (i tabellen transfers) hvor der er sorteret i ascending order? - ellers kunne du prøve at oprette et sådant.

CREATE UNIQUE INDEX etNavn ON transfers (id DESC)
Avatar billede razmuz_dk Nybegynder
16. oktober 2005 - 00:04 #5
Fandt på noget andet. Ellers mange tak du!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester