SELECT t.tid, t.author, t.authorid, t.subject, t.lastpost, t.views, t.replies, m.gender, f.fid, f.name FROM vs.threads t, vs.members m, vs.forums f WHERE 1 AND m.uid=t.authorid AND f.fid=t.fid ORDER BY t.displayorder数据库名称为: vs.查询三个表: 
threads,帖子表
forums, 论坛表
members, 会员表这行语句效率太差,该怎么优化啊。

解决方案 »

  1.   

    在uid、authorid、fid上建立索引,你用的是隐式内连接,应该速度比较快
      

  2.   

    create index idx_displayorder on threads(displayorder);
      

  3.   

    uid, fid 都已经是索引了。
    authorid没有做。我试一下。看。
      

  4.   

    在uid、authorid、fid上建立索引
    or
    SELECT t.tid, t.author, t.authorid, t.subject, t.lastpost, t.views, t.replies, m.gender, f.fid, f.name FROM vs.threads t
    inner join vs.members m
    on m.uid=t.authorid
    inner join vs.forums f 
    on f.fid=t.fid
    ORDER BY t.displayorder
      

  5.   

    threads 表的结构如下:CREATE TABLE threads (
    tid mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
    fid smallint(6) unsigned NOT NULL DEFAULT '0',
    typeid smallint(6) unsigned NOT NULL DEFAULT '0',
    author char(15) NOT NULL DEFAULT '',
    authorid mediumint(8) unsigned NOT NULL DEFAULT '0',
    `subject` char(80) NOT NULL DEFAULT '',
    dateline int(10) unsigned NOT NULL DEFAULT '0',
    lastpost int(10) unsigned NOT NULL DEFAULT '0',
    lastposter char(15) NOT NULL DEFAULT '',
    lastposterid mediumint(8) unsigned NOT NULL DEFAULT '0',
    views int(10) unsigned NOT NULL DEFAULT '0',
    replies mediumint(8) unsigned NOT NULL DEFAULT '0',
    displayorder tinyint(1) NOT NULL DEFAULT '0',
    digest tinyint(1) NOT NULL DEFAULT '0',
    PRIMARY KEY (tid),
    KEY authorid (authorid),
    KEY fid (fid),
    KEY digest (digest),
    KEY displayorder (fid,displayorder,lastpost),
    KEY typeid (fid,typeid,displayorder,lastpost)
    ) TYPE=MyISAM;两次 inner join 会不会比较慢?
      

  6.   

    索引有点多了。算了,用 inner join 吧。结贴。