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

2015-07-17 18:42:38 +08:00
 kdwycz

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

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

从程序运行效率的角度讲

5412 次点击
所在节点    Django
9 条回复
socrates
2015-07-17 18:59:43 +08:00
貌似不是用get 和filter比,而是get和first比更适合

get相当于加了一个limit(2)在里面,如果有重复或者不存在会抛异常,first()相当于limit(1),比get效率要高一些
magine
2015-07-17 19:34:05 +08:00
使用first()更好,但是要注意first()不会抛出异常,找不到只会返回None。
顺便一说咱们公司的代码用的是Django1.5.6,first在1.6才有...
所以你还是用get吧...
kdwycz
2015-07-17 19:36:28 +08:00
kdwycz
2015-07-17 19:37:19 +08:00
@magine 好吧...刚才去shell里面没发现first
ericls
2015-07-17 19:39:47 +08:00
使用 exists() 检查是否存在!
sunus
2015-07-17 19:41:32 +08:00
看下django issue出来的sql就知道了
magine
2015-07-17 20:03:39 +08:00
@kdwycz
我给你的建议是早期设计不要想太多...
实现功能后再慢慢找性能瓶颈,过早优化是万恶之源。
latyas
2015-07-17 21:23:20 +08:00
都是执行一条SQL,瓶颈永远在数据库IO上
virusdefender
2015-07-17 21:46:15 +08:00
存在不存在 用 exists()

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/206456

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX