查找具有重复字段的行,字段类型为blob

时间:2013-07-07 10:05:47

标签: mysql duplicates blob

我有一个包含许多重复行的表,我无法为blob字段创建唯一值,因为它太大了。

如何查找和删除重复blob字段(答案)的重复行?

这是表结构:

CREATE TABLE `answers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_question` int(11) NOT NULL,
  `id_user` int(11) NOT NULL,
  `answer` blob NOT NULL,
  `language` varchar(2) NOT NULL,
  `datetime` datetime NOT NULL,
  `enabled` int(11) NOT NULL DEFAULT '0',
  `deleted` int(11) NOT NULL DEFAULT '0',
  `spam` int(11) NOT NULL DEFAULT '0',
  `correct` int(11) NOT NULL DEFAULT '0',
  `notification_send` int(11) NOT NULL DEFAULT '0',
  `correct_notification` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `id_question` (`id_question`),
  KEY `id_user` (`id_user`),
  KEY `enabled` (`enabled`)
) ENGINE=InnoDB AUTO_INCREMENT=1488 DEFAULT CHARSET=utf8mb4 

1 个答案:

答案 0 :(得分:1)

很可能你可以使用substr() or left()列的前缀并进行比较。您想要采用多大的尺寸取决于您的数据分布或列数据的前缀唯一性。 对于唯一性检查,如果

,您可以触发以下查询
select count(distinct left(answer, 128))/count(*), count(distinct left(answer, 256))/count(*) from answers. 

这将为您提供列中的选择性或数据分布。假设128为您提供1 i.e. all unique if you take first 128 bytes的答案,然后从每行中选择数据量并运行。希望它有所帮助。