我有一个简单的SQL表,如下所示:
id, username, platform, time
Id和用户名是字符串,平台和时间是整数。
我有100万行的慢查询,特别是当我按时间排序顶行时。如何在一次通过中改进所有用例?
我需要:
谢谢你的帮助。
编辑:
以下是查询。
SELECT *
FROM (SELECT @rownum:=@rownum+1 `rank`, `id`
FROM leaderboard, (SELECT @rownum:=0) r ORDER BY `time` DESC)
AS `ranks` WHERE `id`=:id;
SELECT *
FROM leaderboard
ORDER BY `time` DESC
LIMIT 10 OFFSET :page;
REPLACE INTO leaderboard
(`platform`, `id`, `username`, `time`)
VALUES (:platform, :id, :username, :time);
答案 0 :(得分:0)
要按降序排序,您需要3
上的索引。这假定查询中没有t(time)
子句或where
子句。
要通过group by
/ id
/ username
组合进行访问,您需要platform
上的索引。这假设比较都是相等的,并通过(id, username, platform)
连接。