left join optimieren
am 07.01.2007 18:23:19 von Rudi Klingenberg
Hallo,
ich benutze joomla und möchte auf meiner Startseite die zuletzt
kommentierten Bilder immer anzeigen lassen und benutze dabei folgenden
sql-Befehl:
SELECT id,imgthumbname,cmttext,imgtitle
FROM jos_ponygallery
left join jos_ponygallery_comments on
(jos_ponygallery.id = jos_ponygallery_comments.cmtpic)
WHERE jos_ponygallery.published = '1'
AND jos_ponygallery.approved = '1'
ORDER BY jos_ponygallery_comments.cmtdate desc LIMIT 4
Leider ist er bei über 4000 Bildern und 500 Kommentaren relativ langsam.
Die Abfrage dauert mehrere Sekunden. Hat jemand von euch eine Idee wie
man dies optimieren könnte. Vielen Dank im voraus für eure Bemühungen.
Viele Grüße
Rudi
Re: left join optimieren
am 07.01.2007 19:02:11 von Axel Schwenke
Rudi Klingenberg wrote:
>
> ich benutze joomla und möchte auf meiner Startseite die zuletzt
> kommentierten Bilder immer anzeigen lassen und benutze dabei folgenden
> sql-Befehl:
>
> SELECT id,imgthumbname,cmttext,imgtitle
> FROM jos_ponygallery
> left join jos_ponygallery_comments on
> (jos_ponygallery.id = jos_ponygallery_comments.cmtpic)
> WHERE jos_ponygallery.published = '1'
> AND jos_ponygallery.approved = '1'
> ORDER BY jos_ponygallery_comments.cmtdate desc LIMIT 4
Warum machst du einen LEFT JOIN, wenn du doch ohnehin nur kommentierte
Bilder anzeigen lassen willst? Mach einen INNER JOIN daraus, leg einen
Index auf jos_ponygallery_comments.cmtdate und versuch es nochmal.
Allerdings würde ich hier eher über eine separate Liste der letzten 4
Kommentare nachdenken, die beim Speichern eines Kommentars aktualisiert
wird. Nicht mal unbedingt in der Datenbank. Vermutlich wird die Start-
seite deutlich öfter aufgerufen als daß Kommentare geschrieben werden.
Und gerade Startseiten sollten schnell laden, sonst sind sie auch
gleich die letzte Seite, die ein Besucher sich ansieht.
Ach ja, was soll eigentlich passieren, wenn die letzten 4 abgegebenen
Kommentare alle für das gleiche Bild waren?
XL
Re: left join optimieren
am 07.01.2007 19:04:46 von Andreas Kretschmer
Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Re: left join optimieren
am 08.01.2007 11:32:07 von Rudi Klingenberg
Hallo,
>> SELECT id,imgthumbname,cmttext,imgtitle
>> FROM jos_ponygallery
>> left join jos_ponygallery_comments on
>> (jos_ponygallery.id = jos_ponygallery_comments.cmtpic)
>> WHERE jos_ponygallery.published = '1'
>> AND jos_ponygallery.approved = '1'
>> ORDER BY jos_ponygallery_comments.cmtdate desc LIMIT 4
>
> Warum machst du einen LEFT JOIN, wenn du doch ohnehin nur kommentierte
> Bilder anzeigen lassen willst? Mach einen INNER JOIN daraus, leg einen
> Index auf jos_ponygallery_comments.cmtdate und versuch es nochmal.
Vielen Dank für den Tipp. Es funktioniert wieder einwandfrei und ich
sollte mir nochmals diese join-Geschichte ansehen ;)
> Allerdings würde ich hier eher über eine separate Liste der letzten 4
> Kommentare nachdenken, die beim Speichern eines Kommentars aktualisiert
> wird. Nicht mal unbedingt in der Datenbank. Vermutlich wird die Start-
> seite deutlich öfter aufgerufen als daß Kommentare geschrieben werden.
> Und gerade Startseiten sollten schnell laden, sonst sind sie auch
> gleich die letzte Seite, die ein Besucher sich ansieht.
Momentan funktioniert es einwandfrei und das SQL im Modul anzupassen war
relativ simpel. Ich möchte momentan nicht wirklich mehr machen als
unbedingt nötig ist, aber Danke für den Tipp.
> Ach ja, was soll eigentlich passieren, wenn die letzten 4 abgegebenen
> Kommentare alle für das gleiche Bild waren?
Es werden dann vier Bilder mit den jeweils dazugehörigen Kommentar
angezeigt.
Gruß Rudi