我遇到了一个问题,通过用硬值替换参数,我的 SQL Server 查询的性能得到了显着提高。例如:
SELECT * FROM Table1 WHERE RowNumber >= 101 AND ID < 200
明显快于以下:
DECLARE @Start int = 101;
DECLARE @End Start int = 200;
SELECT * FROM Table1 WHERE RowNumber >= @Start AND RowNumber < @End
第一个在大约 2 秒内运行,第二个在 15 秒内运行。所以我的问题是,如果它们是数字和 pnly 参数化字符串,我可以安全地使用硬值吗?我不认为这是索引问题,因为 RowNumber 列已经被索引为非聚集索引。我并不熟悉所有的 SQL 注入技术,但多年来我一直在为所有输入值使用参数,以试图避免 SQL 注入攻击。我从来没有完全意识到使用参数可能会降低性能。
我也看到了一些关于使用参数降低性能的问题,但我还没有看到任何关于如何解决问题的明确答案。