Avatar billede m_sorensen Nybegynder
31. januar 2004 - 17:27 Der er 18 kommentarer og
1 løsning

MEGET langsom SQL

X Jeg har for nyligt konverteret fra Access database til mySQL. Jeg har nu et problem med, at en del af min kode, bruger meget lang genereringstid. Det gjorde det ikke før, da jeg havde Access databasen. Følgende SQL, timer nogen gange ud, andre gange bruger den omkring 30 sek.

SQL = "SELECT photos.id FROM photos INNER JOIN comments ON photos.id = comments.photo WHERE category <> 15 AND category <> 32 GROUP BY photos.id ORDER BY comments.id DESC limit 0,4"


Nogen forslag til hvad der er galt  / kan gøres anderledes ?
Avatar billede stigc Nybegynder
31. januar 2004 - 17:36 #1
Jeg forstår ikke din SQL. Hvad ønsker du at finde?
Avatar billede m_sorensen Nybegynder
31. januar 2004 - 17:41 #2
de 4 sídst kommenterede billeders id
Avatar billede stigc Nybegynder
31. januar 2004 - 17:41 #3
Nu ser jeg det. De 4 nyeste kommentare.
Avatar billede stigc Nybegynder
31. januar 2004 - 17:45 #4
Jeg kan ikke helt se at den skulle virke. Hvad med:

SELECT photos.id, MAX(comments.ID) as lastCommentId
FROM photos INNER JOIN comments
ON photos.id = comments.photo
WHERE category <> 15 AND category <> 32
GROUP BY photos.id
ORDER lastCommentId DESC limit 0,4
Avatar billede m_sorensen Nybegynder
31. januar 2004 - 17:47 #5
hhmm.. jeg kan heller ikke se noget galt, og har før brugt samme løsning som du foreslår. Kan det evt. være serveren som er overbelastet eller noget ?
Avatar billede stigc Nybegynder
31. januar 2004 - 17:49 #6
Har du prøvet min SQL?

Husk også at indekserer photos.id og comments.photo
Avatar billede m_sorensen Nybegynder
31. januar 2004 - 17:51 #7
jeg har prøvet din løsning.. den bruger 60 sek.

jeg prøver lige at indeksere comments.photo, photos.id er indexseret.
Avatar billede m_sorensen Nybegynder
31. januar 2004 - 17:53 #8
jeg benytter phpmyadmin til at administrere mysql databasen. Der er et felt som hedder størrelse, når jeg vil oprette et index, har det noget at sige ?
Avatar billede stigc Nybegynder
31. januar 2004 - 17:58 #9
Kender det ikke.
Avatar billede m_sorensen Nybegynder
31. januar 2004 - 17:59 #10
Nu har jeg oprettet indexet på comments.photo, og det hjælper ikke.
Avatar billede stigc Nybegynder
31. januar 2004 - 18:01 #11
Det burde ikke være noget problem, selv ikke ved rigtig mange rækker. Alternativt kunne du oprette en kolonne i fototabellen som indeholder sidste kommetar ID. Den skal du selvfølgelig holde ved lige. Så skal du ikke joine.
Avatar billede m_sorensen Nybegynder
31. januar 2004 - 18:05 #12
Ja det er selvf. en mulighed, men så er problemet, hvis 2 brugere (i teorien), opretter en kommentar til det samme billede samtidigt... jeg kan ikke forstå, at mysql ikke kan trække den SQL, når Access kan. Jeg må gøre noget forkert.
Avatar billede m_sorensen Nybegynder
31. januar 2004 - 18:11 #13
Nu har jeg fået det til at køre nogenlunde, ved at fjerne INNER JOIN... ?!?

Jeg fatter absolut minus... men jeg kunne godt brugere flere fif til optimering, for det kører stadig lidt trægt.
Avatar billede stigc Nybegynder
31. januar 2004 - 18:13 #14
Ved at fjerne den? Hvrodan ser din sql så ud?
Avatar billede m_sorensen Nybegynder
31. januar 2004 - 18:23 #15
SQL = "SELECT photos.id, MAX(comments.id) AS lastcommentid FROM photos, comments WHERE photos.id = comments.photo AND category <> 15 AND category <> 32 GROUP BY photos.id ORDER BY lastcommentid DESC limit 0,4"
Avatar billede stigc Nybegynder
31. januar 2004 - 18:26 #16
Hmmm. Det skulle da meget gerne være det samme!
Avatar billede m_sorensen Nybegynder
31. januar 2004 - 18:28 #17
Ja det skulle man synes... jeg fatter minus
Avatar billede m_sorensen Nybegynder
01. februar 2004 - 09:36 #18
Nå, men lav et svar, så deler vi point
Avatar billede stigc Nybegynder
01. februar 2004 - 16:00 #19
Behold dem bare.
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
Kurser inden for grundlæggende programmering

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

IT-JOB

Netcompany A/S

Linux Operations Engineer

Politiets Efterretningstjeneste

Fullstack softwareudvikler i PET

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Solution Manager til Cyberdivisionen

Riskpoint A/S (Riskpoint Solutions Limited)

IT Business Analyst