MySQL DISTINCT 更多列
MySQL DISTINCT more column
我有一个日志 table,大约有 50 万行。
其中许多行都是多余的(大约 50 条消息一次又一次地重复)所以我想按消息内容对它们进行分组。
但问题是我使用的是MySQL 5.5,这个版本的InnoDB引擎不支持全文索引。而且我无法使用 MyISAM,因为我正在使用外键。
我用 ORDER BY 子句尝试了这个,但花了大约 7 秒。
当我尝试使用 DISTINCT(message) 时,它以惊人的 300 毫秒完成,但 DISTINCT 只给了我一列。
我应该如何构建带有 DISTINCT 的 SELECT 以及日期、ID 等所有其他列,同时又不影响性能?
如果您的邮件有很多重复,您可能需要将它们分成 "look up" table。我想如果你不能在这个查找中的消息上放置一个 UNIQUE 索引 table,你只需要尽可能地在代码中强制执行它,或者甚至不时做一些清理。
messages
--------
id
user_id
date
...
text (INT FK to message_text.id)
message_text
------------
id
text
这样您就不会一遍又一遍地重复消息文本,但 messages
中的几行可能引用相同的文本。
我有一个日志 table,大约有 50 万行。
其中许多行都是多余的(大约 50 条消息一次又一次地重复)所以我想按消息内容对它们进行分组。
但问题是我使用的是MySQL 5.5,这个版本的InnoDB引擎不支持全文索引。而且我无法使用 MyISAM,因为我正在使用外键。
我用 ORDER BY 子句尝试了这个,但花了大约 7 秒。
当我尝试使用 DISTINCT(message) 时,它以惊人的 300 毫秒完成,但 DISTINCT 只给了我一列。
我应该如何构建带有 DISTINCT 的 SELECT 以及日期、ID 等所有其他列,同时又不影响性能?
如果您的邮件有很多重复,您可能需要将它们分成 "look up" table。我想如果你不能在这个查找中的消息上放置一个 UNIQUE 索引 table,你只需要尽可能地在代码中强制执行它,或者甚至不时做一些清理。
messages
--------
id
user_id
date
...
text (INT FK to message_text.id)
message_text
------------
id
text
这样您就不会一遍又一遍地重复消息文本,但 messages
中的几行可能引用相同的文本。