V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kdwycz
V2EX  ›  Django

关于 django model 的 get 和 filter 方法效率差距

  •  
  •   kdwycz ·
    kdwycz · 2015-07-17 18:42:38 +08:00 · 5414 次点击
    这是一个创建于 3417 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果知道取的值是唯一的,但不一定存在

    是使用get检查异常好,还是使用filter看是否存在好?

    从程序运行效率的角度讲

    9 条回复    2015-07-17 21:46:15 +08:00
    socrates
        1
    socrates  
       2015-07-17 18:59:43 +08:00   ❤️ 1
    貌似不是用get 和filter比,而是get和first比更适合

    get相当于加了一个limit(2)在里面,如果有重复或者不存在会抛异常,first()相当于limit(1),比get效率要高一些
    magine
        2
    magine  
       2015-07-17 19:34:05 +08:00   ❤️ 1
    使用first()更好,但是要注意first()不会抛出异常,找不到只会返回None。
    顺便一说咱们公司的代码用的是Django1.5.6,first在1.6才有...
    所以你还是用get吧...
    kdwycz
        3
    kdwycz  
    OP
       2015-07-17 19:36:28 +08:00
    kdwycz
        4
    kdwycz  
    OP
       2015-07-17 19:37:19 +08:00
    @magine 好吧...刚才去shell里面没发现first
    ericls
        5
    ericls  
       2015-07-17 19:39:47 +08:00
    使用 exists() 检查是否存在!
    sunus
        6
    sunus  
       2015-07-17 19:41:32 +08:00   ❤️ 1
    看下django issue出来的sql就知道了
    magine
        7
    magine  
       2015-07-17 20:03:39 +08:00
    @kdwycz
    我给你的建议是早期设计不要想太多...
    实现功能后再慢慢找性能瓶颈,过早优化是万恶之源。
    latyas
        8
    latyas  
       2015-07-17 21:23:20 +08:00
    都是执行一条SQL,瓶颈永远在数据库IO上
    virusdefender
        9
    virusdefender  
       2015-07-17 21:46:15 +08:00
    存在不存在 用 exists()
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1282 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:59 · PVG 01:59 · LAX 09:59 · JFK 12:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.