2016-08-16 20 views
0

ADD UNIQUESELECT GROUP BY以外,最好的查询除去1亿条记录大表中的重复项是什么?什么是除ADD UNIQUE或SELECT GROUP BY以外的最佳查询删除重复项

在联系人详细信息表(InnoDB的),我有包含100万条记录与15列。它用了12分钟来运行下面的查询,以1个记录:

SELECT * FROM table 
WHERE field1='aaa' AND field2='bbb' AND field3='ccc' AND field4='ddd' AND field5='eee' 
GROUP BY field1, field2, field3, field4, field5 

而且0.275ms与从表中5000个样本下面的查询:

ALTER IGNORE TABLE table 
    ADD UNIQUE(field1(255),field2(255),field3(255),field4(255),field5(255)) 
+0

添加唯一约束将永久删除重复行 –

+0

是否要从表中或查询结果中删除重复项? – jussius

+0

@jussius。从桌上。在发现'ALTER IGNORE TABLE'查询花费时间运行后,我尝试了'SELECT'查询。 – Dhay

回答

0

最好的去除通过复制withou组或独特的条款是distinct

SELECT distinct field1, field2, field3, field4, field5 FROM table 
WHERE field1='aaa' 
AND field2='bbb' 
AND field3='ccc' 
AND field4='ddd' 
AND field5='eee' 

(你应该避免选择*在这种情况下)

+1

仅供参考,优化程序很可能会将其转换为与具有GROUP BY而不是DISTINCT的查询完全相同的查询。但我同意使用DISTINCT可能是更好的风格。 – jussius

+0

我接受这一点。我接受这个作为更好的样式的答案,即使查询花费时间与'ALTER IGNORE TABLE' – Dhay

+0

@Dhay相同。谢谢..记住,Disctinct子句是一个DML子句,您可以使用avioiding数据库模式更改,而alter table是DDL操作并更改数据库模式。这意味着如果您需要唯一的限制,则应该在在noy上使用不同的查询是一个应用需求。 – scaisEdge

相关问题