Найти двоичные дубликаты записей SQL Server 2008 (тип данных изображения) - PullRequest
6 голосов
/ 19 мая 2011

Я унаследовал базу данных с таблицей (300 ГБ), заполненной типом данных SQL Image.Я понимаю, что этот тип данных устарел.

В качестве обычной очистки я хочу удалить все дубликаты Image из таблицы, где выполняются определенные условия.

Как эффективно сравнивать двоичные данные с использованием SQL?Достаточен ли оператор равенства =

Вот сценарий:

Table 'Paperwork'
  int ID
  int EmployeeID
  int AnotherID
  int AnotherFKID
  image Attachment

Я хочу найти все строки, где Attachment, EmployeeID, AnotherID и AnotherFKIDподобные.Это необходимо сделать с минимальным воздействием на базу данных, поскольку в ней более 1116 313 строк.

Редактировать

Тип данных SQL Server Image не поддерживает LIKE или обычные операторы сравнения.

Редактировать

Благодаря @Martin, который предложил привести Image к varbinary.Я добавил к этому, чтобы получить контрольную сумму MD5, используя Hashbytes

HASHBYTES('MD5',CAST(cast([Attachment] as varbinary(max))as varbinary)) AS AttachmentMD5

1 Ответ

3 голосов
/ 19 мая 2011

Джереми,

Любое все в одном скрипте уничтожит буферный кеш при чтении в 300g.Разбейте работу на несколько задач.

Задача 1

  • создайте таблицу с ID и группировкой, чтобы показать дубликаты трех столбцов типа int

Пример таблицы

    TableID  PaperWorkID GroupID
       1        14          1
       2        15          1
       3        21          2
       4        55          2

Теперь мы знаем, что PaperWorkID s 14 и 15 совместно используют три столбца типа int, поскольку они находятся в одной группе.

Задача 2

  • добавить столбец (bigint) в таблицу и заполнить столбец DATALENGTH столбца изображения в таблице Paperwork на основе PaperWorkID в таблице
  • удалите все недубликаты на основе длины данных и GroupID

Задача 3

  • Добавьте столбец varbinary(max) в таблицу.
  • заполнитестолбец с хешем MD5 столбца изображения на основе PaperWorkID в таблице
  • Удалите все недопустимые дубликаты из таблицы на основе хеша MD5 и GroupID

Задача 4

  • сделать 2 резервных копии таблицы PaperWork
  • удалить дублирующиеся записи в Paperwork на основе оставшихся элементовв таблице.

Если данные для столбца изображения были отсканированы с бумаги, существует очень малая вероятность того, что два сканирования произведут одно и то же изображение.Если данные были загружены дважды, вам повезло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...