1

我想知道与通过 SQL Server 2008 运行托管代码相关的性能问题。我听说过一些内存和速度问题。

具体来说,我想实现一个 SHA256 散列 DLL 并使用 SQL Server 2008 将其作为存储过程执行。

或者,我可以简单地从我的 .Net 应用程序执行散列,然后将字符串传递给我的存储过程。

优点缺点?

谢谢。

4

1 回答 1

2

SQLCLR 相当快。如果您明确需要在 T-SQL 中执行 CLR 代码,请使用它。例如,假设您编写了一个带有签名的 SQLCLR 函数:

SqlString Hash(SqlString input)

并且您设法让它以应有的方式运行。您可以执行以下查询:

IF EXISTS(SELECT * FROM Users WHERE HashedPassword = dbo.Hash(@userPassword) AND UserName = @userName)
BEGIN
    SELECT 'You''re alright, Jack.';
END
ELSE
BEGIN
    SELECT 'Bogus.';
END

如果您可以设法在应用程序中对假设的密码字段进行哈希处理,则最好在应用程序中执行此操作并将哈希值传递到 SQL Server 以运行如下查询:

SELECT *
FROM User
WHERE UserName = @userName AND HashedPassword = @hashedPassword

这更好有几个原因:

  1. 您没有将业务逻辑放入难以测试的 SQL Server 中。
  2. 查询本身要简单得多,因此 SQL Server 将做更少的工作,因此速度更快。
  3. 设置 SQLCLR 可能很麻烦(默认情况下 SQLCLR 处于关闭状态)。将程序集部署到 SQL Server 中可能会很痛苦,尤其是在您无法直接访问生产服务器的情况下。
  4. 如果您不使用 SQLCLR,当您更新/部署您的应用程序时,您将不必记住在 SQL Server 中更新/部署 CLR 内容。这减少了您的维护工作。
于 2010-07-29T21:10:37.227 回答