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