MySQL有更多列
我有一个大约500k行的日志表 许多行是冗余的(大约50条消息一次又一次地重复),所以我想按消息内容对它们进行分组 但问题是,我使用的是MySQL 5.5,这个版本中的InnoDB引擎不支持全文索引。我无法使用MyISAM,因为我正在使用外键 我用ORDERBY子句尝试了一下,但花了大约7秒钟 当我尝试使用DISTINCT(消息)时,它以惊人的300毫秒完成,但DISTINCT只给了我一列MySQL有更多列,mysql,group-by,distinct,Mysql,Group By,Distinct,我有一个大约500k行的日志表 许多行是冗余的(大约50条消息一次又一次地重复),所以我想按消息内容对它们进行分组 但问题是,我使用的是MySQL 5.5,这个版本中的InnoDB引擎不支持全文索引。我无法使用MyISAM,因为我正在使用外键 我用ORDERBY子句尝试了一下,但花了大约7秒钟 当我尝试使用DISTINCT(消息)时,它以惊人的300毫秒完成,但DISTINCT只给了我一列 如何使用DISTINCT加上所有其他列(如date、id)构建SELECT,但不影响性能 如果您的消息有很
如何使用DISTINCT加上所有其他列(如date、id)构建SELECT,但不影响性能 如果您的消息有很多重复,您可能需要将它们分离到一个“查找”表中。我想如果您不能在这个查找表中的消息上放置唯一的索引,那么您只需要在代码中尽可能地执行它,或者甚至不时地进行一些清理
messages
--------
id
user_id
date
...
text (INT FK to message_text.id)
message_text
------------
id
text
这样您就不会一遍又一遍地重复消息文本,但是
消息中的几行可以引用相同的文本 你能在字段上创建一个复合唯一索引吗?@bernd buffen好吧,我希望邮件是这样的,我不希望邮件在开头就被过滤掉。请注意,DISTINCT不是一个函数。@BRATHER我就是这样设计的。如果这个问题没有解决方案,我将不得不把它移植到MyISAM中finally@Strawberry现在我意识到我有外键,所以我不能使用MyISAMWell,我决定在date+message(100)上创建一个唯一的索引,所以现在我的查找表中只有很少的日志,我有更好的位置来处理它们。我还做了一个活动,每三天清理一次。非常感谢你dan08和@草莓