首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该用什么来提高绩效。视图/查询/临时表

我应该用什么来提高绩效。视图/查询/临时表
EN

Stack Overflow用户
提问于 2010-06-10 07:53:57
回答 2查看 1.3K关注 0票数 0

我想知道在存储过程中使用Views, Temp Tables and Direct Queries的性能。

每次触发触发器时,我都会创建一个表。我知道这个触发器会非常罕见,并且只会在设置的时候触发一次。

现在,我必须在许多地方使用从触发器创建的表来获取数据,并且我确认没有人在该表中进行任何更改。即ReadOnly表。

我必须使用这些表数据以及多个表来连接和获取结果,以便进行进一步的查询,例如

代码语言:javascript
复制
select * from triggertable

使用临时表

代码语言:javascript
复制
select ... into #tx from triggertable join t2 join t3 and so  on

select a,b, c from #tx --do something
select d,e,f from #tx ---do somethign
--and so on 
--around 6-7 queries in a row in a stored procedure.

使用视图

代码语言:javascript
复制
create view viewname
(
select ... from triggertable join t2 join t3 and so  on
)

select a,b, c from viewname --do something
select d,e,f from viewname ---do somethign
--and so on 
--around 6-7 queries in a row in a stored procedure.

这个视图也可以在其他地方使用。所以我将在数据库而不是sp上创建

使用直接查询

代码语言:javascript
复制
select a,b, c from select ... into #tx from triggertable join t2 join t3 join ... --do something
select a,b, c from select ... into #tx from triggertable join t2 join t3 join ... --do something
.
.
--and so on 
--around 6-7 queries in a row in a stored procedure.

现在,我可以在所有后续查询中创建一个视图/临时表/直接查询用法。

在这种情况下什么才是最好的。

EN

回答 2

Stack Overflow用户

发布于 2010-06-10 08:11:46

如果在安装时只创建了一次triggertable,那么只需直接查询表。如果将SQL查询包装在事务中,则应防止其他用户在查询时更新triggertable

在这种情况下使用视图没有好处。

您可以将triggertable复制到临时表中,但在这种情况下我看不到任何真正的好处。

票数 1
EN

Stack Overflow用户

发布于 2010-06-10 08:21:55

是否总是来自同一源的数据被加入?如果是这样的话,视图上的索引可以提高性能。

我能看到临时表的唯一原因是,如果其中有一个WHERE,它选择了所有后续6-7个查询都可以使用的一个小子集,但您在问题中没有这样或那样的方式。

这两个选项都可以结合使用,但是还有更多您没有提到的因素,比如总数据的大小等等。

否则,我不会像select triggertable.a, t2.b, t3.c from triggertable join t2 join t3 ...那样直接查询这些表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3012588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档