首页 新闻 会员 周边 捐助

关于这2条sql 查询的效率问题

0
悬赏园豆:10 [待解决问题]
select cateID,cateDisplay,cateDomain,cateOrder,parentID,cateName,(select count(1) from blog_tb_category where parentID=table1.cateID ) as cc2, (select COUNT(1) from blog_view_article where blog_view_article.cateID=table1.cateID) cc,table1.ADD_DATE,table1.UPDATE_DATE
from blog_tb_category as table1 inner join blog_tb_blog on table1.blogID=blog_tb_blog.blogID
select blog_tb_category.cateID,cateDisplay,cateDomain,cateOrder,blog_tb_category.parentID,cateName,isnull(cc2,0) cc2
,isnull(cc,0) cc,blog_tb_category.ADD_DATE,blog_tb_category.UPDATE_DATE 
from blog_tb_category  inner join blog_tb_blog on blog_tb_category.blogID=blog_tb_blog.blogID
left join (
select COUNT(*) as cc2,parentID from blog_tb_category group by parentID )as table1 on table1.parentID=blog_tb_category.cateID
left join (
select COUNT(*) as cc,cateID from blog_view_article group by cateID) as table2 on table2.cateID=blog_tb_category.cateID

目的是查询cateID的子分类条数和文章条数,感觉第一句貌似循环了cate的条数那么多次..

第二种是先把子分类条数和文章条数group by 查询出来 在用主表left join

不知道各位高人有何见解?

cqlp的主页 cqlp | 初学一级 | 园豆:192
提问于:2013-09-28 10:25
< >
分享
所有回答(7)
0

建议根据执行计划进行判断

dudu | 园豆:30948 (高人七级) | 2013-09-28 10:44
0

同上,根据实现执行情况,来优化 http://www.kxikx.com

adym | 园豆:202 (菜鸟二级) | 2013-09-28 11:23
0

两个语句一起跑,谁占用的资源少,就用哪个。

幻天芒 | 园豆:37205 (高人七级) | 2013-09-28 11:36
0

调校性能本身就是一个探索的过程 既然你有两种写法,那同时查看两种写法的执行计划,比对结果就是知道哪个效率更高了,当然还可以查看 IO开销 与 时间长短 SET  STATISTICS IO ON  SET  STATISTICS time  ON

Zery | 园豆:6151 (大侠五级) | 2013-09-28 12:13

我表里就几十条数据。。这样试了 没什么差别,看来得整个百万级别来试试。。。

支持(0) 反对(0) cqlp | 园豆:192 (初学一级) | 2013-09-28 15:41
0

同上

鹰击长空123 | 园豆:320 (菜鸟二级) | 2013-09-29 16:31
0

同样的语句在不同的应用环境中产生的执行计划是不一样的。如果你数据量非常小,那么有可能你的执行计划完全一样。楼主最好能自己造点儿大数据的环境,然后分别查看两个语句的执行计划。这个应该是有个临界点,有可能你的数据达到十几万的时候,两个执行计划的区别就能出来,也许需要达到百万级或者千万级才能有明显的差别。

bitbug | 园豆:470 (菜鸟二级) | 2013-12-05 16:38
0

当数据大了第而条的效率要高。

空紫竹 | 园豆:204 (菜鸟二级) | 2014-03-25 17:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册