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