Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL有更多列_Mysql_Group By_Distinct - Fatal编程技术网

MySQL有更多列

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,但不影响性能 如果您的消息有很

我有一个大约500k行的日志表

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

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

我用ORDERBY子句尝试了一下,但花了大约7秒钟

当我尝试使用DISTINCT(消息)时,它以惊人的300毫秒完成,但DISTINCT只给了我一列


如何使用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和@草莓