You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效查询大表中最新更新的行?SurrealDB场景疑问

大表中查询最新更新行的高效方案

先说核心结论

你提到的select * from a_table order by updated_at desc limit 1语句本身能用,但效率高低完全取决于updated_at字段有没有建索引。

没建索引的后果

如果updated_at没索引,数据库得扫描全表所有记录,把所有行的updated_at排序完才能取第一条。2000行时17ms看着还行,但到200万行时,全表扫描+排序的开销会暴增,耗时可能直接跳到几百毫秒甚至几秒,根本没法用。

建索引后的效果

给updated_at建个降序索引(或者普通B树索引,多数数据库都能反向遍历),数据库就能直接通过索引定位到最新的那条记录,不用扫全表也不用排序。这种情况下,不管是2000行还是200万行,查询耗时都会稳定在几毫秒,和数据量几乎没关系。

SurrealDB的具体操作

SurrealDB支持创建索引,你可以用这条语句给updated_at建索引:

CREATE INDEX idx_a_table_updated_at ON a_table(updated_at DESC);

建完索引再跑你的查询,性能会直接起飞。哪怕数据到200万行,耗时也会保持在极低水平,不会出现明显卡顿。

额外优化小技巧

  • 别用select *,如果只需要最新行的几个字段,就明确写出来,能减少数据传输和处理的开销。
  • 建索引会给插入、更新操作带来一点额外开销,但对于这种高频查询的场景,这点代价完全值得。

内容的提问来源于stack exchange,提问作者VKlapan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:02:35