有一个效率上的问题一直搞不懂如何才能够提高!

努力偷懒 2006-04-04 11:01:32
有一个统计,必须使用2个表的数据来进行计算,统计出结果。
现在有一种方案如下:
把两个表的数据用Union的方式,合起来当作一个子查询A
然后根据条件,对这个子查询A进行一定条件的SUM....group统计。
这样,就可以在这个子查询当中统计到尽可能多的字段信息。
方案二:
多次访问两个表,把表1的统计结果+-表2的统计结果。

还有一个涉及到效率的问题:
一:
把多个表的数据做成视图,实现一个完整数据的视图A
在需要对某些数据进行统计的时候,直接去访问视图A进行条件统计。
(使用起来的时候确实很方便,但是,觉得这样做,在进行某项信息统计的时候,有比较多的多余数据,又或者是利用起来的时候,会出现比较多层次的子查询嵌套。但是,有个好处,我不知道说的对不对:SQL Server对视图有优化,不用预编译。)
二:
用存储过程,把当次统计需要的数据,进行多表链接查询(该查询在对数据进行一定筛选的基础上,参照视图A进行查询,但是,该查询使用动态参数进行查询,每次使用的时候,都要先编译一次再执行。)

由于本人手头上没有庞大的数据进行试验,在此,向各位有经验的人士学习学习!先谢过各位!

...全文
255 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
RicCC 2006-06-18
  • 打赏
  • 举报
回复
10、20万左右用union来做,所花时间应当还可以理解
如果是几百万、几千万,最好是做另外的静态统计表,每周、每月的更新一次,报表查询则直接从静态统计表里面取数据
努力偷懒 2006-06-17
  • 打赏
  • 举报
回复
谢谢楼上的各位的关注:
1:
select ... from a where...
union
select ... from b where...(是表A和表B的所有数据进行链接)。


select ... from
(表a union all 表b)
where.....
这里的表A和表B的数据可以是筛选以后的。所以,相对来说,后者的数据量比前者的少。

二:
使用存储过程,比较灵活地尽可能少的数据进行union的操作,但是它的缺点是在这动态查询的时候需要对即将运行的T-SQL语句进行一下编译,然后再运行,也就是说,SQL编译即将运行的T-SQL语句快还是对数据进行Union的操作快,我想,在不同的情况下两者是有区别的,毕竟那是数据量的问题,数据量多,我觉得是用存储过程进行动态搜索然后把结果进行Union比用所有数据进行Union以后再条件筛选会快吧?
冷箫轻笛 2006-04-25
  • 打赏
  • 举报
回复
第一个问题:
如果你涉及到的两个表的数据可以用union 来连接的话
那么
select ... from a where...
union
select ... from b where...

select ... from
表a union all 表b)
where

只是写法不同,效率因该是一样的

下面这个没有看懂你想做什么
撸大湿 2006-04-25
  • 打赏
  • 举报
回复
楼主给几个范例看看
努力偷懒 2006-04-25
  • 打赏
  • 举报
回复
???怎么没人说说经验的啊?晕!

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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