在我的应用程序中优化查询的过程中,我注意到了一些奇怪的事情。在给定的代码部分中,我将获取对象,更新一些值,然后保存。理论上,这应该执行 2 个查询。但实际上它执行了 3 个查询。1 获取对象时选择查询,2 保存对象时选择查询(另一个选择然后更新!)。删除一个查询可能看起来很愚蠢。在这个特定的方法中,我更新了许多对象,因此我保存的每个查询对数据库的命中减少了 1 次,并且应该加快该方法的速度。
通过检查查询,两个选择查询不同,第一个得到很多东西,执行的选择很简单。
这是示例代码:
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"
我希望保存方法能够识别它已经在内存中拥有该对象,并且不需要再次获取它......如果这甚至可能......