私のデータベースには、URLを保持するURLStringという列のSHA1ハッシュを含む計算列があります(例: "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でサポートされている限り)。
例:データベースでは、URLhttp://www.whatismyip.org/の自動的に計算されたSHA1値は0xAE66CA69A157186A511ED462153D7CA65F0C1BF7です。