高手请进:关于视图[内包含派生表]索引的问题!

Dong 2005-10-30 04:00:57
视图比较复杂,自定义了很多的函数,函数表,当然了,包含有派生表的问题[另外其它也搞了很多的派生表]!!没有办法,这是公司要我做的任务,任务是加快对视图的查询速度,我在在试图里建立不了索引![表5--8万记录,一般5万]


问题1:如何在一个包含有派生表的视图里加索引??难道死路一条??

问题2:如果不可以在一个带有派生表的试图里加索引,那么该怎样才可以加快试图的查询能力??

------------------------------------------------------------------
试图 SQL(本人知道下面的语句还要再修改才符合视图索引的语法要求)
select
。。。。。太长影响看问题,删除省烈
from
((select * from GetSpringboard() group by ID,Springboard)[A],
(select * from GetCHboard() group by ID,CHboard)[B]
where A.ID=B.ID)[A],
(select * from GetDestination() group by ID,Destination)[B],
(select * from GetRDate())[C],
(select * from GetTDate())[D],
(* from provide)[E],
(select * from GetPrice())[G]
where A.ID = B.ID
and A.ID = C.ID
and A.ID = D.ID
and A.ID = E.ID
and A.ID = G.ID
--------------------------------------------------------------------

问题3:(select * from GetRDate())[C],这应该是属于派生表了吧?

问题4:((select * from GetSpringboard() group by ID,Springboard)[A],
(select * from GetCHboard() group by ID,CHboard)[B]
where A.ID=B.ID)[A],这个肯定是派生表了吧??
...全文
385 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dong 2005-11-01
  • 打赏
  • 举报
回复
我想先把视图的数据先insert到另一个表中,对表(加索引)进行查询,大家觉得怎样?
--------------------------------------------------------------------------
实时性和效率无法兼顾。
-----------------------------
我可以稍微去掉实时性,你觉得这个办法可行吗?有没有别的办法?
子陌红尘 2005-11-01
  • 打赏
  • 举报
回复
我想先把视图的数据先insert到另一个表中,对表(加索引)进行查询,大家觉得怎样?
--------------------------------------------------------------------------
实时性和效率无法兼顾。
rivery 2005-10-31
  • 打赏
  • 举报
回复
楼主请查看联机帮助“索引视图”
。。。
视图的要求
在视图上创建聚集索引之前,该视图必须满足下列要求:
。。。
不能包含派生表
。。。

CREATE INDEX 语句的要求
在视图上创建的第一个索引必须是唯一聚集索引。在创建唯一聚集索引后,可创建其它非聚集索引。
。。。。
看来问题1可能无解。
那么只能通过其他方法来进行优化了。
这就需要根据楼主的表结构及业务问题来进行。可能的话,请楼主提供更详细点的内容。
Dong 2005-10-31
  • 打赏
  • 举报
回复
我想先把视图的数据先insert到另一个表中,对表(加索引)进行查询,大家觉得怎样?
zxbyhcsdn 2005-10-31
  • 打赏
  • 举报
回复
或者不用视图,因为你没查询一次视图都要查询出所有的纪录,然后再在纪录中找出满足你条件的纪录。数据量大了慢的很

写一个存储过程
然后根据你传入的条件,

用动态Sql返回结果

把下面的这些写道动态Sql中,和你传入的条件一起用Exec执行,然后返回结果

from
((select * from GetSpringboard() group by ID,Springboard)[A],
(select * from GetCHboard() group by ID,CHboard)[B]
where A.ID=B.ID)[A],
(select * from GetDestination() group by ID,Destination)[B],
(select * from GetRDate())[C],
(select * from GetTDate())[D],
(* from provide)[E],
(select * from GetPrice())[G]
where A.ID = B.ID
and A.ID = C.ID
and A.ID = D.ID
and A.ID = E.ID
and A.ID = G.ID
Dong 2005-10-30
  • 打赏
  • 举报
回复
问题1:如何在一个包含有派生表的视图里加索引??难道死路一条??

问题2:如果不可以在一个带有派生表的试图里加索引,那么该怎样才可以加快试图的查询能力??
????????????????????????
rivery 2005-10-30
  • 打赏
  • 举报
回复
都是派生表。
概念:

子查询 (subquery)
嵌套在另一个 SELECT、INSERT、UPDATE 或 DELETE 语句或者另一个子查询内的 SELECT 语句。
包括子查询的语句通常采用以下格式中的一种:
select列表中的返回对应单个值语句,以括号界定。
WHERE expression [NOT] IN (subquery)
WHERE expression comparison_operator [ANY | ALL] (subquery)
WHERE [NOT] EXISTS (subquery)

派生表是 FROM 子句中的 SELECT 语句,以别名或用户指定的名称来引用这些派生表。

22,210

社区成员

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

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