关于,Group By 子句优化的问题,欢迎大家来讨论(100分是不是给不出去了??) (100分)

  • 主题发起人 yinxianglong
  • 开始时间
Y

yinxianglong

Unregistered / Unconfirmed
GUEST, unregistred user!
平台,SQL SERVER
从时间上统计,我发现Group By 子句似乎没有被优化,也就是说查询条件没有被提前
查1 条纪录和100条纪录时间差不多,而且Where 子句中的的条件是完合可提前的

Select * from ( VIEW ) Where XXX='XXX'
View 形式如下
Select XXX,Sum(A),Sum(B),Sum(C) from TBL Group By XXX
不知是SQL SERVER 没有优化,还是不能对其进行优化
不知其它数据库系统是否有解决了此问题
 
你XXX建索引了吗,多用点记录比如1000与10000来比
 
那当然,view是不采用基础表的索引的。
但你可以为视图创建索引
 
此问题与索引无关,我的意思是说,

在存 Group By 的 SQL 在首先查出内层的全部数据纪录集合,外层查询条件不能作用到内层查询
如这样一条查询:

Select * from (select * from A,B where A.Key=B.Key ) as V where A.Key=10
数据库会将查询条键 A.Key=10 提前到内层嵌套这样也就提高了查询效率

Select * from (Select A.Key,(聚合函数)... From A,B
Where A.Key=B.Key Group By A.Key ) as V where A.Key=10
SQL Server 数据库没有将查询条件 A.Key=10 提前到内层嵌套因此查询数据量
大小对查询速度影响不大,如果人工将条件提前,将大幅度的提高查询效率,但同时
这样做可能要写大量的代码,不便于维护
 
xzh2000,你回答的问题有错误,使用不使用索引,与是不是视图无关!![:D]
是谁说跟你说的,试图不会用到基础表的索引了!!
(大型数据库绝不会有此问题)
 
你可以用SQL 2000的查询分析器分析一下,我觉得如果XXX是主键,系统会自动将查询优化,
我也不能肯定,要试了才知道。
 
同志们,我可以明确的告诉大家,SQL SERVER 对GROUP BY 没有通过将查询
条件前移,进行优化
否则,我人工将查询条件提前,速度不会提高的这么多

什么意思呢?
如果人工将查询条件提前,不到1 秒
如果没有提前,要3秒
 
多人接受答案了。
 
顶部