同时为多个客户提供独特的结果

时间:2016-08-05 08:46:24

标签: mysql performance

我有一个包含几百万行的表,同时有几个客户端正在访问这个表,每个表需要获得20个唯一的行,然后需要排在最后一行。

我的设置是:

表格结构:

id | last_access | reserved_id | [Data columns]
id + last_access is indexed

为了选择20个唯一行,我使用以下内容:

UPDATE "table" SET "reserved" = 'client-id_timestamp' WHERE "reserved" = ''ORDER BY "last_access" ASC LIMIT 20

此更新查询性能非常差,这就是我要问的原因:

我的具体要求是否有更好的解决方案?可能是另一个表结构?

1 个答案:

答案 0 :(得分:1)

last_access是日期列吗?尝试用整数值表示它(即自1970-01-01以来的秒数),排序可能会更快。

第二个性能问题可能来自更改“保留”字段后重新索引表的需要。如果从该列中删除索引,性能可能会提高。虽然搜索需要更长的时间,但更昂贵的重新索引却被抛弃了。

如果您使用的是MySQL 5.6.3或更高版本,则可以使用查询执行EXPLAIN,以找出最长时间的内容。