视图和存储过程之间是不是存在性能差异

Posted

技术标签:

【中文标题】视图和存储过程之间是不是存在性能差异【英文标题】:Is there any performance difference between view and stored procedures视图和存储过程之间是否存在性能差异 【发布时间】:2015-07-01 05:56:27 【问题描述】:

我有大量数据。我已经为所有这些编写了 SQL 查询并检索数据。我的观点是我应该在视图或 SP 中编写这些查询。 即我需要知道两者之间是否有任何重大区别

INSERT INTO TABLE TABLE_NAME EXEC SP
OR
INSERT INTO TABLE TABLE_NAME SELECT * FROM VIEW

【问题讨论】:

螺丝刀和锤子的性能区别是什么?它们是完全不同的工具,虽然您可以滥用其中一个并尝试在另一个角色中使用它,但您真的不应该。 存储过程和视图用途不同,只能比较两个用途相同的东西,否则比较少用 【参考方案1】:

有任何主要的性能差异吗?不,但前提是存储过程中的查询与视图中的查询完全相同。您不应该看到任何主要的性能差异。如果存在性能差异,您将不会注意到它。如果你开始向 proc 添加额外的代码(参数、逻辑等),那么所有的赌注都没有了。

【讨论】:

你能提供任何来源吗?【参考方案2】:

这是艺术问题,或重用(维护)的能力。 我个人更喜欢使用 drop 和 create tables 而不是创建复杂的视图。原因很简单,任何人都必须从一个屏幕上理解逻辑,而不是打开多个表、视图、GUI 代码,也许还有报告进程。

【讨论】:

【参考方案3】:

如果存储过程中的查询与视图中的查询完全相同。查询分析器应该使用相同的执行计划。

我在这里运行了一些测试,在 SP 和视图中使用相同的查询。对于每种类型,两者的执行时间相似,大约为 6 秒,而 SP 稍慢一些。但这只是一个简单的sql语句的测试。

【讨论】:

以上是关于视图和存储过程之间是不是存在性能差异的主要内容,如果未能解决你的问题,请参考以下文章

存储过程与函数编译和性能差异

视图和内联表函数之间是不是存在性能差异?

存储过程在从源视图更新表时存在性能问题

MYSQL数据太大时怎么优化 视图?存储过程? - 技术问答

存储过程 - 函数性能差异

2008SQL 存储过程中可以创建视图吗