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

Mysql 查找具有重复字段的行,字段类型为blob,mysql,duplicates,blob,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) NO

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

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

select count(distinct left(answer, 128))/count(*), count(distinct left(answer, 256))/count(*) from answers. 

这将为您的专栏提供选择性或数据分布。假设128给出的答案为1
,也就是说,如果您使用前128个字节,那么所有答案都是唯一的,然后从每行中选择该数量的数据并进行运算。希望有帮助。

多大的
多大
?根据您的疑问,我手动删除所有重复的答案,并创建一个唯一的索引。:)谢谢