【发布时间】:2021-04-18 14:26:42
【问题描述】:
我正在使用 PostgreSQL,并且我有一个游戏供玩家参加。
我有下表来描述玩家和锦标赛玩家(参加给定锦标赛的玩家)。这些表被简化为仅包含查询中使用的内容:
CREATE TABLE player (
id INTEGER NOT NULL,
username VARCHAR(255),
push_notification_token VARCHAR(255)
);
CREATE TABLE tournament_player (
tournament_id INTEGER NOT NULL,
player_id INTEGER NOT NULL,
victories INTEGER NOT NULL
);
当锦标赛结束时,我想以 100 人为一组删除所有锦标赛玩家,然后我还希望按照他们在锦标赛中的排名(胜利 DESC)进行排序。
我目前正在使用以下查询来删除、限制和加入:
DELETE FROM tournament_player tp
USING player p
WHERE tp.player_id = p.id
AND (tp.tournament_id, tp.player_id) IN (
SELECT tournament_id, player_id
FROM tournament_player
LIMIT 100)
RETURNING tp.player_id, tp.victories,
p.username, p.push_notification_token;
我有两个问题:
- 我如何也通过锦标赛玩家(胜利)订购 (DESC)
- 这个查询是浪费资源还是优化得足够好? (我的意思不是在字段中添加 INDEX)
【问题讨论】:
标签: sql postgresql