MySQL只获得查询ID最高的行

时间:2013-04-03 14:15:14

标签: mysql

Hello 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)| logType(varchar)|时间(日期时间)| playerID(int)| positionX(int)| positionY(int)| actionID(int)| action(varchar)|提示(varchar)| ip(varchar)| itemNumber(INT)

阐释:

ID:已记录操作的唯一ID

logType:已记录操作的类型(示例:“PLAYER”或“ITEM”)

时间:动作发生的时间

playerID:播放器的ID(或与该类型相关的其他ID)

positionX:游戏中的X位置

positionY:游戏中的Y位置

actionID:与动作相关的ID(示例:如果日志操作为“KILLED_BY_PLAYER”,则为杀死玩家的其他玩家的玩家ID)

操作:记录的操作(示例:KILLED_BY_PLAYER)

提示:一些有用的提示,如播放器的名称

ip:播放器的IP

itemNumber:Item的编号,如果涉及Item,则为NULL

感谢您的帮助。 :)

2 个答案:

答案 0 :(得分:1)

获得最高ID:

select max(id) from table;

您可以在select语句中放置where子句的其他人。

答案 1 :(得分:0)

您应该可以使用timeLIMIT 1对您进行排序的查询。如果对列time的排序很慢,则必须确保索引已优化(对查询运行explain)。您需要logtypeplayer_idtime上的索引。即使有50万行,这也不应该是一个问题......