问题描述
id | abstract_text |
1 | long paragraph1 |
2 | long paragraph2 |
3 | long paragraph1 |
它具有大约150,000个唯一ID,但是某些ID具有相同的abstract_text值(例如1和3)。
我正在使用此命令
delete t1 from t1
inner join t1 t2
where
t1.application_id < t2.application_id AND
t1.abstract_text=t2.abstract_text;
但是,已经超过2个小时,并且尚未完成运行。 abstract_texts是很长的段落,所以我知道它不会很快。我尝试创建索引,但是由于不能使用abstract_text b / c创建索引而太长(抛出ER_TOO_LONG_KEY: Specified key was too long; max key length is 3072 bytes
错误),因此我不确定如何使用该索引。
有什么方法可以加快这一过程?
解决方法
删除操作对于数据库来说是一个昂贵的过程,您可以选择创建一个新表,在该表中删除重复的段落,
CREATE TABLE t3 AS
SELECT t1.application_id,t1.abstract_text
FROM t1
JOIN t1 t2
WHERE t1.application_id > t2.application_id
AND t1.abstract_text=t2.abstract_text
UNION ALL
SELECT MAX(application_id) AS application_id,abstract_text
FROM t1
GROUP BY abstract_text
HAVING COUNT(*)=1