先上demo代码(phalcon框架):
$phql = update cars set price = 15000.00 where name = 'focus';$result = $manager->executequery($phql);if ($result->success() == false) { foreach ($result->getmessages() as $message) { echo $message->getmessage(); }}
通过监听phalcon的底层sql生成,上述示例代码,会被解析成两个sql语句:
select * from cars where name='focus';#此处的id=1是根据上一条select返回记录的主键值update cars set price=15000.00 where id=1
也就是说,phql底层在执行update语句时,会先根据条件查询相关记录,再根据相关记录的主键值去更新数据。
如果从查询优化的角度来说, 若是更新条件没有做索引处理,那必然会引起性能损耗。phql底层自动转化为以主键为更新条件,这也算是规避了这种风险。
但是从sql执行的角度来看, 每一次更新操作,都需要执行两条sql,这又算不算是另一种性能损耗了?
不知道这种处理方式算不算是一个坑 ?
回复内容: 先上demo代码(phalcon框架):
$phql = update cars set price = 15000.00 where name = 'focus';$result = $manager->executequery($phql);if ($result->success() == false) { foreach ($result->getmessages() as $message) { echo $message->getmessage(); }}
通过监听phalcon的底层sql生成,上述示例代码,会被解析成两个sql语句:
select * from cars where name='focus';#此处的id=1是根据上一条select返回记录的主键值update cars set price=15000.00 where id=1
也就是说,phql底层在执行update语句时,会先根据条件查询相关记录,再根据相关记录的主键值去更新数据。
如果从查询优化的角度来说, 若是更新条件没有做索引处理,那必然会引起性能损耗。phql底层自动转化为以主键为更新条件,这也算是规避了这种风险。
但是从sql执行的角度来看, 每一次更新操作,都需要执行两条sql,这又算不算是另一种性能损耗了?
不知道这种处理方式算不算是一个坑 ?
