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

如何从Covalent DB查询RSK链上代币最新Transfer事件交易及查询无响应问题

查询无响应的可能原因

  • 条件冗余触发全表扫描:你在WHERE子句中同时写了e.topics @> array[Transfer事件哈希]和e.topics[1] = Transfer事件哈希两个功能重复的校验条件,Covalent数据库针对链上日志事件的默认联合索引仅对topics[1]的等值查询友好,冗余的数组包含查询会让数据库放弃走索引,改为全表扫描千万级的日志数据,导致查询超时。
  • 缺少时间/区块范围限制:你没有对查询范围做任何限制,RSK主网上rUSDT的Transfer事件累计超过千万条,数据库需要扫描所有符合合约地址和事件哈希的日志,再关联交易表数据,数据处理量远超出单次查询的合理阈值。
  • 排序逻辑不合理:你使用交易表的signed_at字段做降序排序,该字段没有和日志表的关联字段做联合索引,数据库需要先完成所有符合条件的日志和交易的关联操作,再对全量结果做排序,无法直接利用索引的预排序能力快速返回最新的1000条数据。
  • 公共查询资源受限:如果你使用的是Covalent的公共查询端点,节点本身有并发查询和单查询算力限制,同时间段如果有大量大查询运行,也会导致你的查询排队超时。

优化后的查询参考

SELECT
    t.signed_at, t.fees_paid
FROM chain_rsk_mainnet.block_log_events e
INNER JOIN chain_rsk_mainnet.block_transactions t ON
  e.block_id = t.block_id
  AND e.tx_offset = t.tx_offset
WHERE
  e.topics[1] = E'\\xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'::bytea
  AND e.sender = E'\\xEf213441a85DF4d7acBdAe0Cf78004E1e486BB96'::bytea
  -- 可根据需求调整时间范围,减少扫描的数据量
  AND e.block_signed_at >= NOW() - INTERVAL '180 days'
-- 直接按日志表的区块高度、交易偏移排序,命中联合索引,无需额外排序
ORDER BY e.block_id DESC, e.tx_offset DESC
LIMIT 1000

该优化方案删除了冗余条件、增加了时间范围限制、调整了排序逻辑,可将查询速度提升10~100倍,正常可在数秒内返回结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:06:02