Mou*_*Mou 5 sql-server stored-procedures
我经常使用存储过程进行数据访问,但不知道哪个是最佳视图或SP.
存储过程和视图都已编译,执行计划保存在数据库中.所以请告诉我哪一个最适合数据访问目的,为什么最好列出原因请.
我搜索谷歌知道哪一个是最好的,但没有得到预期的答案.
小智 12
当涉及存储过程导致应用程序更新变得更加困难时,我不同意Jared Harding.更新存储过程要比更新应用程序代码容易得多,这可能需要重新编译,并要求您将用户踢出系统进行更新.如果在存储过程中编写所有SQL,则可能只需要将应用程序的更新频率降低一半.并且可以更新存储过程而不会中断用户.
我强烈建议在视图或应用程序代码中编写的SQL上使用存储过程.使用参数化存储过程(使用构建为字符串的动态SQL并使用安全sp_executesql函数调用),您可以编写单个存储过程来选择可在多个应用程序和报表中使用的数据.除非您确实需要阻止对基础表的权限,否则几乎不需要使用视图.在存储过程中创建基本SELECT查询然后使用参数选项来更改结果的过滤方式要好得多.例如,每个参数都可以为WHERE子句添加不同的行.通过不传递任何参数,您将获得完整的未过滤记录集.只要您需要通过不同的字段过滤结果,您只需要在该过程中添加一个参数和一行代码,然后让任何需要使用它的应用程序传入参数.通过将存储过程参数默认为null,您不必更改为其他目的调用该存储过程的任何应用程序.
视图和存储过程具有完全不同的用途。视图是一种将复杂关系集(例如跨多个表连接的关系集)引用为平面表的便捷方法,而无需实际强制显示数据。您可以使用视图来清理 SQL 代码。您的存储过程可以调用视图。视图通常用于权限控制。您可以授予数据库用户对视图的访问权限,而不授予他们对基础表的访问权限。这将授予用户对视图中的列的列级权限,这是一种比授予对整个表的访问权限更精细的权限控制方法。
存储过程用于将常用功能作为一个单元保存在一起。老实说,SP 已经不再受到许多程序员的青睐。虽然您认为 SP 缓存了其执行计划是正确的,但动态 SQL 自 SQL Server 2000 以来就具有执行计划缓存(我相信这是正确的版本)。使用 SP 获得的唯一速度增益是通过网络发送更少的数据,而且这将是极小的。SP 往往会使代码变得更加脆弱,并且在应用程序更改并不真正需要更改时需要对数据库进行更改。例如,如果您只想更改所选行的条件。使用 SP,您将必须对应用程序和数据库代码进行更改。如果您使用动态 SQL 或 ORM 工具,则只需对应用程序进行更改即可简化部署。SP 绝对有其存在的时间和地点,但它们不必是与数据库交互的唯一方法。
此外,如果您担心性能,您可以具体化视图,从而减少重复查询基础表的需要。如果您觉得需要增加物化视图带来的插入/更新的额外开销,这可以极大地提高您的性能。
| 归档时间: |
|
| 查看次数: |
12246 次 |
| 最近记录: |