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
不知道各位高人有何见解?
建议根据执行计划进行判断
两个语句一起跑,谁占用的资源少,就用哪个。
调校性能本身就是一个探索的过程 既然你有两种写法,那同时查看两种写法的执行计划,比对结果就是知道哪个效率更高了,当然还可以查看 IO开销 与 时间长短 SET STATISTICS IO ON SET STATISTICS time ON
我表里就几十条数据。。这样试了 没什么差别,看来得整个百万级别来试试。。。
同上
同样的语句在不同的应用环境中产生的执行计划是不一样的。如果你数据量非常小,那么有可能你的执行计划完全一样。楼主最好能自己造点儿大数据的环境,然后分别查看两个语句的执行计划。这个应该是有个临界点,有可能你的数据达到十几万的时候,两个执行计划的区别就能出来,也许需要达到百万级或者千万级才能有明显的差别。
当数据大了第而条的效率要高。