0

我有一个包含许多重复行的表,我无法为 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 
4

1 回答 1

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,然后从每一行中选择该数量的数据并工作。希望能帮助到你。

于 2013-07-07T11:30:41.443 回答