我应该如何在MySQL表中索引我的列?

时间:2017-04-01 12:39:31

标签: mysql indexing

我有一个简单的SQL表,如下所示:

id, username, platform, time

Id和用户名是字符串,平台和时间是整数。

我有100万行的慢查询,特别是当我按时间排序顶行时。如何在一次通过中改进所有用例?

我需要:

  • paginate,按降序时间排序
  • 获取id / username / platform combo的行号
  • 更新在id / username / platform combo上播放的时间

谢谢你的帮助。

编辑:

以下是查询。

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);

1 个答案:

答案 0 :(得分:0)

要按降序排序,您需要3上的索引。这假定查询中没有t(time)子句或where子句。

要通过group by / id / username组合进行访问,您需要platform上的索引。这假设比较都是相等的,并通过(id, username, platform)连接。