你好 Stackoverflow 社区,
这是我在这里的第一篇文章,所以我为我糟糕的英语道歉!:)
如果您不想阅读所有内容,则问题标记如下。
标题有点误导,但我不知道如何更好地解释它,但详细的解释应该让你明白:
我有一个很大的日志表(此时大约有 500000 行),其中一个游戏服务器记录了游戏中发生的许多动作。我想以最有效的方式提取一些特定的日志行。
我无法更改游戏服务器的日志系统,如果可以的话,我会将其更改为更多的日志表,以创建更紧凑的日志。(因为在该表上执行查询需要时间..)
现在我的问题是,我想获取特定类型的最后一个日志行,并从特定的玩家 ID 获取玩家的最后操作,但我不知道如何以有效的方式做到这一点。例子:
SELECT * FROM log WHERE logType = "PLAYER" AND playerID = [playerID] ORDER BY time DESC LIMIT 1
然后网站上的输出将是:您最后的操作是[人类可读的操作和附加信息]。
MySQL 分析现在告诉我,对结果进行排序需要最多的时间。
现在我的问题是:是否可以只获取特定玩家 ID 和类型的最后一行? 我想这可以用 ID 完成,因为它有 auto_increment。那么是否有可能获得具有最高 ID、特定类型和特定玩家 id 的行?
表结构:ID(int) | 日志类型(varchar) | 时间(日期时间) | 玩家ID(int) | 位置X(int) | 位置Y(int) | 动作ID(int) | 动作(varchar) | 提示(varchar) | ip(varchar) | 项目编号(整数)
解释:
ID:记录操作的唯一 ID
logType:记录动作的类型(例如:“PLAYER”或“ITEM”)
time:动作发生的时间
playerID:玩家的 id(或与该类型相关的其他 id)
positionX:游戏中的X位置
positionY:游戏中的Y位置
actionID:与动作相关的 id(例如:如果日志动作是“KILLED_BY_PLAYER”,则为杀死该玩家的其他玩家的玩家 id)
action:记录的动作(例如:KILLED_BY_PLAYER)
提示:一些有用的提示,比如玩家的名字
ip:播放器的IP
itemNumber:Item的编号,如果涉及到Item,否则为NULL
谢谢你的帮助。:)