在我的数据库中,我有一个计算列,其中包含一个名为 URLString 的列的 SHA1 哈希,该列包含 URL(例如“http://xxxx.com/index.html”)。
我经常需要查询表以根据 URLString 列找到特定的 URL。该表包含 100K,这些查询需要几秒钟(使用 SQL Azure)。由于 URL 可能很长,我无法在此列上创建索引(超过 450 个字节)。
为了加快速度,我想从 C# 计算 SQL Server hashbytes('SHA1',[URLString]) 的等价物并基于此值进行查询。
我尝试了下面的代码,但我得到的值与数据库计算的值不同。
var urlString = Encoding.ASCII.GetBytes(url.URLString); //UTF8 also fails
var sha1 = new SHA1CryptoServiceProvider();
byte[] hash = sha1.ComputeHash(urlString);
我在这里错过了一些微不足道的事情吗?
我对可以解决相同问题的其他想法持开放态度(只要 SQL Azure 支持它们)。
示例:在数据库中自动计算出 URL http://www.whatismyip.org/的 SHA1 值为0xAE66CA69A157186A511ED462153D7CA65F0C1BF7。