0

我对 MySQL DBMS 的性能有疑问。也许是一件小事。有两个表,我需要得到如下结果:

     PLAYERS                           VISITS
     ID | PLAYER_NAME                  ID | PLAYER_ID | SEEN
     ----------------                  ---------------------------
     1  | user 1                        1 | 2         | 2012-12-12
     2  | user 2                        2 | 2         | 2012-12-13
     3  | user 3                        3 | 3         | 2012-12-13
     4  | user 4                        4 | 3         | 2012-12-14
                                        5 | 3         | 2012-12-14
                                        6 | 2         | 2012-12-15
RESULT:
ID | PLAYER_NAME | LAST_SEEN  
----------------------------
 1 | user 1      | NULL / 'NEVER'
 2 | user 2      | 2012-12-15
 3 | user 3      | 2012-12-14
 4 | user 4      | NULL / 'NEVER'

我目前的查询是:

   SELECT 
   players.id, 
   players.player_name, 
   MAX(visits.seen) AS last_seen
   FROM players
   LEFT JOIN visits ON players.id = visits.player_id
   GROUP BY players.id,players.player_name 

对我有用,但在我看来,它应该是一种更有效的方法。

它只是更大查询的关键部分。

托马斯

4

1 回答 1

0

player_id为了使这个连接有效,必须在in上有一个索引VISITS。调查

`CREATE INDEX` 

这里。

要检查查询效率,您可以随时使用:

EXPLAIN SELECT /* your select here */

此外,如果PLAYERS.ID是唯一且主键,则仅按此 ID 分组是完全可以的。

SELECT 
   players.id, 
   players.player_name, 
   MAX(visits.seen) AS last_seen
FROM players
   LEFT JOIN visits ON players.id = visits.player_id
GROUP BY players.id

但是您的原始查询非常好。如果您省略列,请确保您完全理解GROUP BY列不包括在内的后果。GROUP BY这可能会在其他查询中产生意想不到的后果(其中相同的 id 并不意味着相同的名称,即)

于 2013-05-24T22:01:16.190 回答