Web 应用程序中准备好的查询的性能和可扩展性优势?
Posted
技术标签:
【中文标题】Web 应用程序中准备好的查询的性能和可扩展性优势?【英文标题】:Performance and scalability benefits of prepared queries in web applications? 【发布时间】:2015-08-05 18:32:37 【问题描述】:我正在将一个长期存在的 Web 应用程序(基于 .net 网络表单,带有一些经典的 ASP)从 SQL Server 2000 迁移到 SQL Server 2014。
我应该重构我的查询以使用准备好的语句吗?在大多数情况下,Web 应用程序将准备然后执行每个查询。同一查询的下一个用户将准备,然后再次执行它。
使用准备好的 SQL 查询代替直接执行是否有任何性能优势或纵向扩展优势?它会帮助表服务器的查询计划器避免重复昂贵的操作吗?
是否有任何安全的方法可以将准备好的查询对象存储在 Web 服务器 (IIS) 中,以便下一个客户端可以重用它们?
我知道 Oracle 这样做有很大的优势;它可以重用准备好的语句的执行计划,其优势远远超过重新准备相同语句的成本。在 SQL Server 2014 上也是如此吗?
(我知道使用准备好的语句来克服 sql 注入漏洞;我不是在问这个问题。)
这里的问题专门针对 Microsoft 产品 SQL Server。
【问题讨论】:
SQL缓存机制请参考这里。 msdn.microsoft.com/en-us/library/Cc293623.aspx 为什么不写存储过程呢? SQL 服务器将缓存为即席查询生成的执行计划,就像它为其他查询所做的那样。我建议将您的数据移动到具有存储过程的数据层。 您似乎对数据库很有经验,所以我不会告诉您存储过程的优点,您的问题的直接答案是,sql server 缓存 AD HOC 查询的执行计划。 sqlskills.com/blogs/kimberly/… performance of parameterized queries for different db's 的可能副本 【参考方案1】:很多人在 cmets 中说过,但我将其发布为答案,因为它是对问题的回答:
SQL Server 缓存计划。如果缓存中有查询,它不会重新编译您的查询。准备语句没有任何好处,这已经由缓存完成了。
【讨论】:
以上是关于Web 应用程序中准备好的查询的性能和可扩展性优势?的主要内容,如果未能解决你的问题,请参考以下文章