Mailinglisten-Archive |
ANGEL Harald schrieb: > Nochmal der SQL: > SELECT meinung_profil. * , user.nickname, user.farbe FROM > meinung_profil LEFT JOIN user ON meinung_profil.userid = user.userid > > WHERE meinung_profil.forumID = 30284 ORDER BY meinung_profil.threadid > > DESC, meinung_profil.sort_im_thread ASC LIMIT 0 , 30 mhm, müsstest halt mla verschiedene Sachen probieren: einen Index nur auf meinung_profil.forumID das SELECT aufteilen: SELECT * FROM meinung_profil WHERE meinung_profil.forumID = 30284 ORDER BY meinung_profil.threadid DESC, meinung_profil.sort_im_thread ASC LIMIT 0, 30 SELECT user.nickname, user.farbe FROM user WHERE user.userid IN ([userids vom vorhergehenden select]) damit sparst du zwar nicht wirklich Arbeitsschritte, aber MySQL muss keine so große temporäre Tabelle aufbauen. oder die Sortierung in PHP vornehmen: SELECT meinung_profil.meinungsID, meinung_profil.threadid, meinung_profil.sort_im_thread FROM meinung_profil WHERE meinung_profil.forumID = 30284 [sortieren und ids bestimmen in PHP] z. B.: while ($row = mysql_fetch(....)){ $messages[sprintf('%011d%011d', 999999 - $row['threadid'], $row['sort_im_thread'])] = $row['meinungsID']; } ksort($messages); $selected_ids = implode(', ', array_slice($messages, 0, 30)); SELECT meinung_profil.*, user.nickname, user.farbe FROM meinung_profil LEFT JOIN user ON meinung_profil.userid = user.userid WHERE meinung_profil.meinungsID IN ($selected_ids) wobei du beim messen immer beachten musst das der query cache immer erst beim zweiten Aufruf greift, du also mindestens das query zweimal unverändert aufrufen musst um ein vergleichbares Ergebnis zu erhalten. -- Sebastian Mendel www.sebastianmendel.de
php::bar PHP Wiki - Listenarchive