2016-01-22 55 views
0

我有一个约500k行的日志表。MySQL DISTINCT更多列

许多行都是多余的(大约50条消息一遍又一遍地重复),所以我想通过消息内容对它们进行分组。

但问题是,我与MySQL 5.5和InnoDB引擎在这个版本不支持全文索引。而且我无法使用MyISAM,因为我正在使用外键。

我试过这与ORDER BY子句,但它花了大约7秒。

当我用DISTINCT(消息)试过时,它在惊人的300ms内完成,但DISTINCT只给出了一列。

我应该如何使用DISTINCT生成SELECT以及所有其他列,比如date,id,但是不会影响性能?

+0

您可以在字段上创建复合唯一索引吗? –

+0

@ bernd-buffen我想要像他们这样的消息,我不希望他们开始过滤。 – user2201196

+0

请注意,DISTINCT不是一个函数。 – Strawberry

回答

0

如果你的信息有很多重复,你可能想把它们分成一个“查找”表。我想如果你不能在这个查找表中的消息上放置一个UNIQUE索引,你只需要在代码中强制执行它,或者甚至不时进行一些清理。

messages 
-------- 
id 
user_id 
date 
... 
text (INT FK to message_text.id) 

message_text 
------------ 
id 
text 

,那么你就不会被一遍又一遍地重复邮件文本,但在messages几行可以引用相同的文本。

+0

那么我决定在date + message(100)上创建一个UNIQUE索引,所以现在我在查找表中只有几个日志,我有更好的位置来处理它们。我还做了一个活动,每3天清理一次。非常感谢dan08和@Strawberry – user2201196