У меня есть таблица с одним столбцом (AbsoluteUrl NVARCHAR (2048)), и я хочу сделать запрос к этому столбцу, поэтому для сравнения каждой записи с моей собственной строкой потребовалось много времени. хотя бы в этой таблице 1000000 записей.
Теперь я думаю, что есть лучшее решение для создания контрольной суммы для каждого AbsoluteUrl и сравнения с контрольной суммой вместе вместо столбца AbsoluteUrl. поэтому я использую метод ниже для генерации контрольной суммы. но я хочу, чтобы другой класс создавал контрольные суммы длиной не более 128 байтов.
public static byte[] GenerateChecksumAsByte(string content)
{
var buffer = Encoding.UTF8.GetBytes(content);
return new SHA1Managed().ComputeHash(buffer);
}
И подходит ли этот подход для моей работы?
UPDATE
Согласно ответам, я хочу объяснить более подробно. так что на самом деле я работаю над очень простой системой веб-поиска. Если я хочу кратко объяснить, что я должен сказать, когда будут извлечены все URL-адреса веб-страницы (коллекция найденных URL-адресов), то я собираюсь проиндексировать это в таблице Urls.
Уникальный идентификатор UrlId Первичный ключ NotNull (кластерный индекс)
AbsoluteUrl nvarchar (2048) NoyNull
Контрольная сумма varbinary (128) NotNull
Итак, сначала я ищу в таблице, есть ли у меня тот же URL, который был проиндексирован ранее или нет. если нет, то создайте новую запись.
public Url Get(byte[] checksum)
{
return _dataContext.Urls.SingleOrDefault(url => url.Checksum == checksum);
//Or querying by AbsoluteUrl field
}
И метод сохранения.
public void Save(Url url)
{
if (url == null)
throw new ArgumentNullException("url");
var origin = _dataContext.Urls.GetOriginalEntityState(url);
if (origin == null)
{
_dataContext.Urls.Attach(url);
_dataContext.Refresh(RefreshMode.KeepCurrentValues, url);
}
else
_dataContext.Urls.InsertOnSubmit(url);
_dataContext.SubmitChanges();
}
Например, если на одной странице я нашел 2000 URL, я должен искать 2000 раз.