【发布时间】:2012-05-14 12:19:48
【问题描述】:
我的应用程序中有一个视图,它与另一个视图和一个表有一个 INNER JOIN。
view ViewName
select * from AnotherView inner join TableName ON conditions
使用 INNER JOIN 语句专门执行此视图需要太多时间。所以我正在尝试使用 SP 来提高性能。我正在尝试删除物理表上的 INNER JOIN。
我的 SP 将获取更多子句所需的数据。
所以代码将如下所示,
view ViewName
select * from AnotherView where columnName in (result of SP)
我尝试了表变量,在视图中调用视图。但是每次执行的时间似乎都是一样的,只是有些细微的差别。
谁能帮我理解这一点?有可能吗?有没有其他更好的方法来实现这一点。我不想使用 openrowset。
提前致谢,
维杰
【问题讨论】:
-
听起来你想要一个表值函数,而不是存储过程——如果你想利用结果集的话。
-
是什么让您认为存储过程会提高性能? - 如果查询目前表现不佳,您应该检查索引 - 不要引入优化器可以less处理的新的、不透明的代码。
-
您确定问题的原因了吗?连接可能会使查询变慢,但它应该是真正的问题吗?例如,您的
AnotherView是什么样的? -
AnotherView 只是一个从其他一些视图和物理表中填充数据的视图。我随机选择了SP。如果我删除内部连接,查询的第一部分将在 2 秒内执行。使用内部连接,几乎 40K 记录需要 30 秒。
标签: c# sql-server sql-server-2008 stored-procedures views