来自Azure的SQL强制参数化建议

时间:2017-07-10 09:43:07

标签: sql-server entity-framework azure parameterization

我在我的项目中使用Azure SQL数据库,并且正在非常频繁地执行一些相同的查询。 最近我收到了性能建议 - Non-Parameterized queries are causing performance issues。并建议在我的数据库中执行以下语句。

ALTER DATABASE [TestDB] SET PARAMETERIZATION FORCED

我开始知道强制参数化可以通过减少查询编译和重新编译的频率来提高某些数据库的性能。 此外,众所周知,存储过程是可执行代码,并且在用户之间自动缓存和共享,并且它可以防止重新编译。

请帮助我解决下面列出的问题。

1)将数据库转换为强制 PARAMETERIZATION 会比将常用查询存入存储过程更好吗?

2)在我的数据库中执行强制参数化选项是否安全?

2 个答案:

答案 0 :(得分:1)

如果没有进一步的测试,它是否会更好地工作很难说,但如果顾问告诉你启用参数化会提高性能,那么你一定要尝试一下。这就是原因:

  

点击即可快速轻松地应用此建议   Apply命令。一旦您应用此建议,它将启用   在几分钟内强制参数化在数据库上并启动   监测过程大约持续24小时。后   在此期间,您将能够看到显示的验证报告   数据库的CPU使用率在之前和之后24小时   推荐已被应用。 SQL Database Advisor具有安全性   自动恢复应用的推荐的机制   案例已检测到性能回归。

更多信息:

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-advisor#parameterize-queries-recommendations

答案 1 :(得分:1)

  

1)将数据库转换为Forced PARAMETERIZATION会比将常用查询存入存储过程更好吗?

没有。强制参数化是一种解决方法,适用于不能正确参数化查询的应用程序。最好将参数用于频繁运行的查询,以及您希望计划基于单个值的硬编码值。

EG

select * 
from Orders
where CustomerId = @customerID
and Active = 1