按顺序将值插入到sqlite数据库中

dgm*_*p88 1 database sqlite sorting

我在 SQLITE 中有一个高分表,它支持三个简单的操作:

  1. 添加新用户以及他们的高分。
  2. 更新现有用户的高分。
  3. 获取排行榜(所有用户和分数按分数排序):
    SELECT * FROM scores ORDER BY high_score DESC

一切正常,但我担心这是如何扩展的:10,000 名用户对高分进行排序需要大约 60 毫秒,这是可以的,但是这个时间大致呈线性上升,因此如果我有 100,000 名用户请求高分将需要大约 600 毫秒,这是太慢了。

有没有一种聪明的方法来插入新用户/更新他们的分数,以避免每次检索排行榜时都必须进行完整排序?例如像 C++ priority_queue 或 python heapq 之类的东西。

我想我可以在每次插入时对整个数据库进行排序和替换(例如对整个 SQLite 表进行排序),但这似乎有点矫枉过正。

Gor*_*off 5

如果您担心order bya 中的性能select,则创建一个索引。对于简单的查询,例如:

select s.*
from scores s
order by s.high_score desc;
Run Code Online (Sandbox Code Playgroud)

你想要一个索引scores(high_score)

create index idx_scores_highscore on scores(high_score desc);
Run Code Online (Sandbox Code Playgroud)