本帖最后由 mark35 于 2012-12-3 20:38 编辑
这个url中SQL语句先不说索引采用,其查询构造就存在问题:
- SELECT p.authorid, p.tid, p.pid, p.fid, p.invisible, p.dateline, p.message, t.special, t.status, t.subject, t.digest,t.attachment, t.replies, t.views, t.lastposter, t.lastpost, t.displayorder FROM pre_forum_post p
- INNER JOIN pre_forum_thread t ON t.tid=p.tid AND t.fid IN
- ('274','80', ....)
- WHERE p.authorid='36661' AND p.first='0' ORDER BY p.dateline DESC LIMIT 0,20
复制代码 左表只有 authorid 和 first 两个过滤条件,结果集可能上万,内层thread无论是否用fid过滤其结果肯定会不会太大,而mysql只支持 nested loop, 在外层结果集比内层大的情况下性能会变差。
所以可以把内层的 fid 条件添加(或者移动)到外层post表上这样就可以极大地提高 nested loop 的效率。
|