2013-07-07 91 views
0

我有許多重複行很多的表,我無法爲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 
+0

「大」有多大? – Strawberry

+0

根據您的疑問我手動刪除所有重複的答案並創建一個唯一的索引。 :)謝謝 – ilmetu

回答

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然後從每行和工作中選擇數據量。希望能幫助到你。

+0

感謝這個建議幫助我:) – ilmetu