Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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只获取查询ID最高的行_Mysql - Fatal编程技术网

MySQL只获取查询ID最高的行

MySQL只获取查询ID最高的行,mysql,Mysql,大家好,我的社区 这是我在这里的第一篇帖子,所以我为我的英语不好道歉!:) 如果您不想阅读所有内容,则问题会像这样标记为 标题有点误导,但我不知道如何更好地解释它,但详细的解释应该让您理解: 我有一个大的日志表(此时大约500000行),其中游戏服务器记录了游戏中发生的许多动作。我想以最有效的方式提取一些特定的日志行 我无法更改游戏服务器的日志系统,如果可以,我会将其更改为更多的日志表,以创建更多紧凑的日志。(因为对该表执行查询需要花费时间.) 现在我的问题是,我想从特定的玩家id获取特定类型的

大家好,我的社区

这是我在这里的第一篇帖子,所以我为我的英语不好道歉!:)

如果您不想阅读所有内容,则问题会像这样标记为

标题有点误导,但我不知道如何更好地解释它,但详细的解释应该让您理解:

我有一个大的日志表(此时大约500000行),其中游戏服务器记录了游戏中发生的许多动作。我想以最有效的方式提取一些特定的日志行

我无法更改游戏服务器的日志系统,如果可以,我会将其更改为更多的日志表,以创建更多紧凑的日志。(因为对该表执行查询需要花费时间.)

现在我的问题是,我想从特定的玩家id获取特定类型的最后一个日志行,以获取玩家的最后一个动作,但我不知道如何高效地实现这一点。 例如:

那么网站上的输出将是: 您最后的操作是[人类可读的操作和附加信息]

MySQL评测现在告诉我,对结果进行排序花费的时间最多

现在我的问题是:是否可以只获取特定玩家id和类型的最后一行? 我想这可以用ID完成,因为它有自动增量。所以是否可以获取ID最高、特定类型和特定玩家ID的行?

表格结构: ID(int)| logType(varchar)| time(datetime)| playerID(int)| positionX(int)| positionY(int)| actionID(int)| action(varchar)| hits(varchar)| ip(varchar)| itemNumber(int)

解释:

ID:记录的操作的唯一ID

日志类型:记录的操作的类型(例如:“玩家”或“物品”)

时间:操作发生的时间

玩家id:玩家的id(或与该类型相关的其他id)

位置X:X在游戏中的位置

位置:在游戏中的位置

actionID:与该动作相关的id(例如:如果日志动作是“被玩家杀死”,则是杀死该玩家的另一玩家的玩家id)

动作:记录的动作(例如:被玩家杀死)

提示:一些有用的提示,比如玩家的名字

ip:播放器的ip

itemNumber:项目编号,如果涉及项目,则为空


谢谢你的帮助。:)

要获得最高id:

select max(id) from table;

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

要获得最高id:

select max(id) from table;

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

您应该能够在使用
LIMIT 1对
时间进行排序的地方使用查询。如果在
time
列上的排序很慢,则必须确保索引已优化(对查询运行
explain
)。您需要在
日志类型
玩家id
时间
上建立索引。即使有500000行,这也不成问题…

您应该能够使用查询,在
时间
上使用
限制1
进行排序。如果在
time
列上的排序很慢,则必须确保索引已优化(对查询运行
explain
)。您需要在
日志类型
玩家id
时间
上建立索引。即使有500000行,这也不成问题…

如果表格是按自动递增ID排序的,那么您应该可以按ID desc排序,限制为1。这比按时间排序快一点,谢谢!如果表格是按自动递增ID排序的,那么您应该可以按ID desc排序,限制为1。这比按时间排序快一点,谢谢!这不是一个真正的问题,只需要1到5秒钟。但我想知道我是否可以跳过排序。我想到了这样一种方法,即只获取ID最高的行,该行与
logType
playerID
等特定内容相匹配。但是,如果不进行排序就不可能,也可以。:)嗯,您确实需要按
sort
MAX
进行排序。无论哪种方式,我都希望查询在不到一秒钟的时间内执行。当我在一个160万行的表中运行类似的查询时,它将在4.1毫秒内执行。。。如果执行时间为1-5秒,一定是出了问题!也许您可以在查询中发布
EXPLAIN
的输出?
1 | SIMPLE | log | index | playerID,logType | time | 9 | NULL | 2 |使用where
这是使用查询
EXPLAIN SELECT*的输出,其中logType=“playerID”和playerID=1按时间顺序描述限制1
,我希望您能阅读它,因为我无法在这篇评论中正确地放置标题:/很难阅读输出,但似乎正在使用的关键是
time
,但上面没有索引(
NULL
)?我仔细检查,time根据PHPMyAdmin有一个索引。。我想我必须通过MySQL配置来优化它,因为我从来都不太关心这个问题。谢谢你的帮助!:)这不是一个真正的问题,只需要1到5秒钟。但我想知道我是否可以跳过排序。我想到了这样一种方法,即只获取ID最高的行,该行与
logType
playerID
等特定内容相匹配。但是,如果不进行排序就不可能,也可以。:)嗯,您确实需要按
sort
MAX
进行排序。无论哪种方式,我都希望查询在不到一秒钟的时间内执行。当我在一个160万行的表中运行类似的查询时,它将在4.1毫秒内执行。。。如果执行时间为1-5秒,一定是出了问题!也许您可以在查询中发布
EXPLAIN
的输出?
1 |简单|日志|索引| playerID,logType | time | 9 | NULL | 2 |使用where