Mysql 使SQL命令更快

Mysql 使SQL命令更快,mysql,sql,Mysql,Sql,您好,我有一个SQL命令: SELECT AllServers.steamid, max(AllServers.lastlog) FROM ( SELECT steamid, lastlog FROM server_27105.players UNION SELECT steamid, lastlog FROM server_27234.players UNION SELECT steamid, lastlog FROM server_27387.players UNION SELECT

您好,我有一个SQL命令:

SELECT AllServers.steamid, max(AllServers.lastlog) FROM ( 
SELECT steamid, lastlog FROM server_27105.players UNION 
SELECT steamid, lastlog FROM server_27234.players UNION 
SELECT steamid, lastlog FROM server_27387.players UNION 
SELECT steamid, lastlog FROM server_27408.players UNION 
SELECT steamid, lastlog FROM server_27522.players UNION 
SELECT steamid, lastlog FROM server_27563.players UNION 
SELECT steamid, lastlog FROM server_27612.players UNION 
SELECT steamid, lastlog FROM server_27654.players UNION 
SELECT steamid, lastlog FROM server_27679.players UNION 
SELECT steamid, lastlog FROM server_27698.players UNION 
SELECT steamid, lastlog FROM server_27770.players UNION 
SELECT steamid, lastlog FROM server_27843.players UNION 
SELECT steamid, lastlog FROM server_27976.players 
) as AllServers GROUP BY AllServers.steamid ORDER BY max(AllServers.lastlog) DESC LIMIT 0, 50
但这需要10秒来加载


有任何加快速度的提示吗?

尽可能使用UNION ALL而不是UNION:

联合会组合两个或多个查询的结果,但是联合也会验证是否存在重复的值,并在查询结果中删除它们。如果您不知道,这方面可能会减慢查询速度。如果可能的话,我们总是尽量避免


这就是为什么联盟速度更快。因为它不会删除查询中的重复值。如果只有很少的行(比如1000行),UNION和UNION ALL之间几乎没有性能差异。但是,如果有更多的行,您可以看到差异。

谢谢,命令现在快了两秒,这是您的情况下唯一可能的解决方案。因为下一个可能的优化是使用您已经实现的LIMIT 50。没有LIMIT Arg,时间负载是相同的。如果我们坚持基本原则,UNION在CPU使用率方面比JOIN快,在您的情况下,UNION ALL比UNION好。因此,这是我最好的选择。请接受它的答案,在您的输出时间上有所不同。您应该考虑只使用一个数据库,而只使用一个表来指定一个指定服务器的列。