在我的应用程序中优化查询的过程中,我注意到一些奇怪的东西。在给定的代码段中,我将获取该对象,更新一些值然后保存。理论上这应该执行2个查询。但实际上它执行3个查询。 1当我得到对象时选择查询,2当我保存对象时选择查询(另一个选择,然后更新!)。删除一个查询可能看起来很愚蠢。在这个特定的方法中,我更新了很多对象,所以我保存的每个查询在数据库上的命中次数减少了1,并且应该加速该方法。Django另一个优化保存()
通过对查询的检查,两个select查询是不同的,第一个查询得到很多东西,并且由它们执行的选择很简单。
下面是示例代码:
myobject = room.myobjects.get(id=myobject_id) # one query executed here
myobject.color = color
myobject.shape = shape
myobject.place = place
myobject.save() # two queries executed here
查询:
1) "SELECT `rooms_object`.`id`, `rooms_object`.`room_id`, ......FROM `rooms_object` WHERE (`rooms_object`.`id` = %s AND `rooms_object`.`room_id` = %s)"
2) "SELECT (1) AS `a` FROM `rooms_object` WHERE `rooms_object`.`id` = %s LIMIT 1"
3) "UPDATE ......this ones obvious"
我想保存的方法来识别它已经在内存中的对象,它并不需要再次得到它。 ...如果这是可能的...
我已经做了使用tracelytics.com跟踪和最有趣的部分是第二个查询需要大约1ms的每个查询。所以它非常快,但它确实为这个特定视图增加了1秒。但是现在它确实很有意义。谢谢。 –
您的意思是说您的视图正在进行1000次更新,这意味着存在1秒的检查? – jdi
是的,这是正确的。 –