MYSQL查询速度特别慢,是不是我的表结构有问题,请大家看一下。

standford 2013-10-18 10:38:18
表一,是小说表:
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 ;


现在不知道是什么问题,查询速度特别慢,请高手看看是不是表建的不对。


...全文
537 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hlxtg 2013-10-21
  • 打赏
  • 举报
回复
根据查询的需求,表加上索引
standford 2013-10-18
  • 打赏
  • 举报
回复
第一个是热点内容查询,是和点击表关联的查询指令: 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秒才行。
xuzuning 2013-10-18
  • 打赏
  • 举报
回复
是否有问题,需要看到完整的查询指令才知道
standford 2013-10-18
  • 打赏
  • 举报
回复
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); } 这是查询的标签代码,这里有问题吗。
xuzuning 2013-10-18
  • 打赏
  • 举报
回复
sql 指令的问题
码无边 2013-10-18
  • 打赏
  • 举报
回复
desc select * from …分析下查询 慢的地方,合理加上索引
真中传人 2013-10-18
  • 打赏
  • 举报
回复
在查询器里在你的查询语句前面加explain 例如 EXPLAIN select * from user where user='999' 具体相关解释看这个 http://www.blogjava.net/persister/archive/2008/10/27/236813.html
baselive 2013-10-18
  • 打赏
  • 举报
回复
是不是數量大?

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧