K@llenMedlem sedan mars 20032 667 inlägg SELECT fp.messageTime, fp.messageUid, fp.topicId, p.req_Username
FROM forum_post fp
INNER JOIN forum_topic ft
ON fp.topicId = ft.topicId
INNER JOIN Profil p
ON fp.messageUid = p.AnvId
WHERE ft.forumId = 11
ORDER BY fp.messageId DESC
LIMIT 1
mySQL skrev:
The SELECT would examine too many records and probably take a very long time. Check your WHERE and use SET OPTION SQL_BIG_SELECTS=1 if the SELECT is ok
Jag ser inget fel och fattar mig inte på felmeddelandet även om jag förstår vad där står. Någon som fattar vad felet kan vara?
K@llenMedlem sedan mars 20032 667 inlägg Lyckades nog lösa det själv. :D
SELECT fp.messageTime, fp.messageUid, fp.topicId, p.req_Username, max(fp.messageId) AS latest
FROM forum_topic ft
INNER JOIN forum_post fp
ON ft.topicId = fp.topicId
INNER JOIN Profil p
ON fp.messageUid = p.AnvId
WHERE ft.forumId = 11
GROUP BY fp.messageTime, fp.messageUid, fp.topicId, p.req_Username
ORDER BY latest DESC
LIMIT 1
K@llenMedlem sedan mars 20032 667 inlägg Nu när jag börjat använda denna sql-fråga skarpt märker jag att den är ganska seg att köra. Finns det något sätt att skriva denna fråga effektivare?
LarsGMedlem sedan dec. 200012 464 inlägg Det är nog mer intressant att se vilka index som finns och vad resultatet av explain säger.
K@llenMedlem sedan mars 20032 667 inlägg Okey, here we go... :)
Index
forum_post
Keyname | Unique | Field
PRIMARY | Yes | messageId
topicId | No | topicId
messageUid | No | messageUid
forum_topic
Keyname | Unique | Field
PRIMARY | Yes | id
id | No | id
topicId | No | topicId
forumId | No | forumId
Profil
AnvId
Och resultatet från explain:
http://member.webforum.nu/K%40llen/mysqldump.gif
LarsGMedlem sedan dec. 200012 464 inlägg Det kanske är bäst att dela upp detta i två delar då det verkar bli lite suspekt optimering.
select max(fp.messageid)
from forum_post fp join forum_topic ft
ON ft.topicId = fp.topicId
WHERE ft.forumId = 11
select fp.messageTime, fp.messageUid, fp.topicId, p.req_Username
FROM forum_post fp INNER JOIN Profil p
ON fp.messageUid = p.AnvId
where fp.messageid = <maxfpmessageid>
(Egentligen skulle man lägga den första frågan som en subselect.)
K@llenMedlem sedan mars 20032 667 inlägg Jo, så kan man ju göra. :) Ibland blir det nog effektivare med två frågor. Vad menar du med suspekt optimering?
K@llenMedlem sedan mars 20032 667 inlägg Det verkar vara snabbare med två frågor i detta fallet, tack LarsG! :)