我在项目中使用Azure SQL
数据库,其中非常频繁地执行一些相同的查询集。 最近我收到一个性能建议说 -Non-Parameterized queries are causing performance issues
. 并建议在我的数据库中执行以下语句。
ALTER DATABASE [TestDB] SET PARAMETERIZATION FORCED
我开始知道强制参数化可以通过减少查询编译和重新编译的频率来提高某些数据库的性能。 此外,已知存储过程是可执行代码,会自动缓存并在用户之间共享,并且可以防止重新编译。
请帮助我解决下面列出的问题。
1(将数据库转换为强制参数化是否比将常用查询转换为存储过程更好?
2(在我的数据库中执行强制参数化选项是否安全?
1(将数据库转换为强制参数化是否比将常用查询转换为存储过程更好?
不。 强制参数化是未正确参数化查询的应用程序的解决方法。 最好对频繁运行的查询使用参数,并在希望计划基于单个值的情况下使用硬编码值。
EG
select *
from Orders
where CustomerId = @customerID
and Active = 1
很难说如果没有进一步的测试,它是否会更好,但如果顾问告诉您启用参数化将提高性能,那么您绝对应该尝试一下。原因如下:
您可以通过单击 应用命令。应用此建议后,它将启用 在几分钟内对数据库进行强制参数化,然后开始 监控过程大约持续 24 小时。后 在此期间,您将能够看到显示的验证报告 数据库的 CPU 使用率 24 小时前后 建议已应用。SQL 数据库顾问具有安全性 自动还原 中应用的建议的机制 检测到性能回归的情况。
更多信息在这里:
https://learn.microsoft.com/en-us/azure/sql-database/sql-database-advisor#parameterize-queries-recommendations