| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8207 人关注过本帖
标题:300万条数据,3张表联合查询 select top 8 要8秒多,怎么提高查询效率?
只看楼主 加入收藏
sw4433
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2009-5-24
结帖率:44.44%
收藏
已结贴  问题点数:20 回复次数:13 
300万条数据,3张表联合查询 select top 8 要8秒多,怎么提高查询效率?
select top 8 n.id,n.title,n.createTime,c.[name],count(com.id) as comCount,
    c.id as caId
    from news n
    left join category c on n.caId = c.id --inner join速度慢
    left join comment com on com.newsId = n.id
    group by n.id,n.title,n.createTime,c.[name],c.id
    order by comCount desc

总共3张表 news(新闻表),category(分类表),comment(评论表)

-- 100万条数据  2秒多

-- 300万条数据  8秒多

时间有点长,效率态低,怎么解决啊?
搜索更多相关主题的帖子: 查询 数据 效率 top select 
2010-09-17 07:14
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:10 
1.似乎可以改进这个语句。Group by子句似乎不需要那么项目
2.建立索引(考虑簇集)

★★★★★为人民服务★★★★★
2010-09-17 08:24
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
order by comCount desc这样在三表连接后再处理似乎不得不慢。
可以考虑先从comment表来入手,用子查询试试。

★★★★★为人民服务★★★★★
2010-09-17 08:30
gupiao175
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:40
帖 子:1787
专家分:7527
注 册:2007-6-27
收藏
得分:10 
楼主的机子配置不错啊,强悍!

我的845机器,512内存,200万的3表联合查询就可能会当机!更别说300万了。估计一执行就死机!

Q:1428196631,百度:开发地 即可找到我,有事请留言!
2010-09-17 15:28
gupiao175
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:40
帖 子:1787
专家分:7527
注 册:2007-6-27
收藏
得分:0 
注:我的845板不支持512M内存,比较土的杂牌主板,是2根256M的杂牌军组合成512的!

Q:1428196631,百度:开发地 即可找到我,有事请留言!
2010-09-17 15:30
sw4433
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2009-5-24
收藏
得分:0 
建了索引了 title 和 createTime

2010-09-17 21:08
sw4433
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2009-5-24
收藏
得分:0 
以下是引用cnfarer在2010-9-17 08:30:56的发言:

 order by comCount desc这样在三表连接后再处理似乎不得不慢。
可以考虑先从comment表来入手,用子查询试试。
子查询怎么改?
group by n.id,n.title,n.createTime,c.[name],c.id 这个是必须的啊,少一个就会报错!
2010-09-17 21:13
sw4433
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2009-5-24
收藏
得分:0 
以下是引用gupiao175在2010-9-17 15:28:50的发言:

楼主的机子配置不错啊,强悍!

我的845机器,512内存,200万的3表联合查询就可能会当机!更别说300万了。估计一执行就死机!
945 3G内存

几百万数据没什么问题,就是时间长点
2010-09-17 21:14
sw4433
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2009-5-24
收藏
得分:0 
以下是引用cnfarer在2010-9-17 08:30:56的发言:

 order by comCount desc这样在三表连接后再处理似乎不得不慢。
可以考虑先从comment表来入手,用子查询试试。
有类似的sql语句吗?

group by n.id,n.title,n.createTime,c.[name],c.id
    order by comCount desc

group by 。。。是必须的啊
order by comCount desc 我是想根据评论的数量排序啊

有类似的多表查询的实例吗? 要能查询几百万甚至上亿千万数据的
2010-09-17 21:33
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
是不是要找到新闻中评论最多的前8条?!如果是,先从comment表中,找出8个符合条件的newsid,再进行连接查询得到其他项目,这肯定要快得多。
你这个查询语句是先连接再统计,再取前8条,连接的工作量相当大(如果用我的方法,连接工作量要少多少,是很容易比较出来的)。

★★★★★为人民服务★★★★★
2010-09-18 20:41
快速回复:300万条数据,3张表联合查询 select top 8 要8秒多,怎么提高查询效率 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016412 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved