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

为何Postgres查询速度快于Redis?Django场景测试疑问

为什么1500行数据的Postgres查询比Redis ZRANGE更快?

嘿,这个现象其实挺常见的——虽然Redis作为内存数据库的性能光环很强,但在小数据量场景下被Postgres反超完全说得通,我来帮你梳理几个核心原因:

  • 数据量太小,Postgres其实也在内存里跑
    1500行的表对于Postgres来说简直是小case,它的shared_buffers缓存机制早就把整张表加载到内存里了。这时候Postgres和Redis都是在内存中操作,Redis的“内存优势”根本体现不出来。反而Postgres用本地Unix套接字和Django通信的延迟极低,比Redis的套接字/网络往返开销(哪怕是本地Redis)还要小。

  • Django ORM vs Redis操作的额外开销差异
    你用Django对象管理器做简单排序,Postgres直接在内存里完成排序后,通过本地连接把数据返回给Django,整个流程的额外开销很少。而Redis这边,哪怕是执行ZRANGE这样的简单命令,也需要经历:Django发起请求→Redis处理→返回结果的往返过程。如果你的测试还涉及把Redis返回的数据转换成Django模型对象,那额外开销会更大,直接拉低整体速度。

  • Postgres的小数据排序效率极高
    Postgres对于小数据集的排序会使用内存快速排序(Sort Method: QuickSort),这种排序的效率和Redis有序集合的跳表查询效率相差无几。但加上Redis的通信延迟,Postgres的整体速度就反超了。

  • Redis有序集合的结构 overhead
    Redis的ZSET是用跳表+哈希表实现的,这种结构在处理大规模数据时优势明显,但对于1500个元素来说,跳表的节点存储等额外开销反而不如Postgres紧凑的行存储高效,尤其是当Postgres表已经完全在内存缓存中的时候。

给你的测试建议

如果想看到Redis的性能优势,可以试试把数据量放大到10万+行,或者故意让Postgres缓存失效(比如重启Postgres)后再测试。另外,也可以优化Redis的使用方式,比如用本地Redis实例减少通信延迟,或者批量获取数据来降低往返次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:56:19