我有一个包含许多重复行的表,我无法为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
答案 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
的答案,然后从每行中选择数据量并运行。希望它有所帮助。