Mysql 查找具有重复字段的行,字段类型为blob
我有一个包含许多重复行的表,我无法为blob字段创建唯一值,因为该字段太大 如何查找和删除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
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个字节,那么所有答案都是唯一的,然后从每行中选择该数量的数据并进行运算。希望有帮助。多大的多大
?根据您的疑问,我手动删除所有重复的答案,并创建一个唯一的索引。:)谢谢