表一,是小说表:
CREATE TABLE IF NOT EXISTS `book` (
  `bid` int(6) unsigned NOT NULL AUTO_INCREMENT, 
  `siteid` smallint(2) NOT NULL DEFAULT '0', 多站点ID
  `catid` smallint(6) NOT NULL,   栏目ID
  `title` char(80) NOT NULL,  标题
  `words` char(20) NOT NULL DEFAULT '0', 字数统计
  `content` text NOT NULL,  简介
  `inputtime` int(11) NOT NULL, 录入时间
  `updatetime` int(11) NOT NULL, 更新时间
  `username` varchar(40) NOT NULL, 用户名
  `author` varchar(100) NOT NULL, 作者
  `letter` char(5) NOT NULL, 首字母
  `thumb` varchar(200) NOT NULL, 缩略图
  `url` varchar(200) NOT NULL, 静态地址
  `keywords` varchar(200) NOT NULL,关键字
  `passed` tinyint(1) NOT NULL DEFAULT '0',连载情况
  `status` tinyint(2) NOT NULL DEFAULT '99',审核
  `posid` tinyint(1) NOT NULL DEFAULT '0',推荐ID
  PRIMARY KEY (`bid`),
  KEY `siteid` (`siteid`,`passed`,`catid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;表二,章节表
CREATE TABLE IF NOT EXISTS `book_capital` (
  `cid` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `bid` int(6) unsigned NOT NULL,  书ID
  `listorder` int(8) NOT NULL DEFAULT '0',排序
  `title` varchar(180) NOT NULL,章节标题
  `content` text NOT NULL,章节内容
  `updatetime` int(11) NOT NULL,更新时间
  `url` varchar(200) NOT NULL,章节地址
  PRIMARY KEY (`cid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=38065 ;
现在不知道是什么问题,查询速度特别慢,请高手看看是不是表建的不对。

解决方案 »

  1.   

    public function lists($data) {
    $siteid = $data['siteid'] ? intval($data['siteid']) : get_siteid();
    $catid = intval($data['catid']);
    $passed = $data['passed']==''?"3":$data['passed'];
    $posid = intval($data['posid']);
    $catidin = $data['catidin'];
    //echo $data['letter'];
    //echo ord($data['letter']);
    if(ord($data['letter'])>60){
    $letter=$data['letter'];
    }
    //$letter = $data['letter']==0?"":$data['letter'];
    if(isset($data['where'])) {$sql = " and ".$data['where'];} 
    $thumb = intval($data['thumb']) ? " AND thumb != ''" : '';
    if ($siteid) $where .= " `siteid`='".$siteid."'";
    if ($passed==0 or $passed==1) $where .= " and `passed`='".$passed."'";
    if ($posid) $where .= " and `posid`='".$posid."'";
    if ($catidin) $where .= " and catid in('".$catidin."')";
    if ($catid) $where .= " and `catid`='".$catid."'";
    if ($letter) $where .= " and `letter`='".$letter."'";
    $where .= ' AND `status`=\'99\''.$sql.$thumb;
    $order = $data['order'];
    return $this->db->select($where, '*', $data['limit'], $order);
    }
    这是查询的标签代码,这里有问题吗。
      

  2.   

    第一个是热点内容查询,是和点击表关联的查询指令:
    select a.bid,a.title,a.author,a.content,a.updatetime,a.catid,a.url, a.posid, b.bid,b.hits ,b.hits from book a,book_hits b where a.bid=b.bid and a.posid=2 order by hits desc LIMIT 1点击表:
    CREATE TABLE IF NOT EXISTS `book_hits` (
      `catid` int(6) NOT NULL,
      `bid` int(6) unsigned NOT NULL,
      `hits` int(6) NOT NULL DEFAULT '0',
      `day` int(6) DEFAULT '0',
      `week` int(6) DEFAULT '0',
      `month` int(6) DEFAULT '0',
      `updatetime` int(11) NOT NULL,
      PRIMARY KEY (`bid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    第二个是单表查询的:select * from book where `siteid`='1' and `posid`='1' and `catid`='22' AND `status`='99' AND thumb != '' order by bid desc limit 0,10整个页面就这两种查询。打开首页差不多要20秒才行。
      

  3.   

    在查询器里在你的查询语句前面加explain
    例如
    EXPLAIN select * from user where user='999'
    具体相关解释看这个
    http://www.blogjava.net/persister/archive/2008/10/27/236813.html
      

  4.   

    desc  select * from …分析下查询 慢的地方,合理加上索引