2017-04-01 32 views
0

我设计这样一个简单的SQL表:我该如何索引我的MySQL表中的列?

id, username, platform, time 

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

我收到了一百万行的缓慢查询,特别是当我按时间排序排列最上面的行时。我怎么能一次改善我的所有用例?

我需要:

  • PAGINATE,通过降时间排序出场
  • 得到一个ID /用户名/平台组合
  • 更新一个ID /用户名/平台上播放时的行号组合

谢谢你的帮助。

编辑:

以下是查询。

SELECT * 
FROM (SELECT @rownum:[email protected]+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

我刚刚做到了。感谢您的建议。 – BinarMorker

+0

那些“组合”太模糊;请提供'SELECT'。 –

回答

0

要按时间顺序排序,您需要一个索引t(time)。这假设查询中没有where子句或group by子句。

要访问id/username/platform组合,您需要一个索引(id, username, platform)。这假定比较都是平等的,并通过and进行连接。