PHQL update 语法解析的疑问( phalcon)

2016-05-16 15:31:02 +08:00
 Marser

先上 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 ,这又算不算是另一种性能损耗了? 不知道这种处理方式算不算是一个坑 ?

3132 次点击
所在节点    PHP
2 条回复
juice
2016-05-17 00:09:56 +08:00
可以用原生的 SQL 代替
Marser
2016-05-17 10:46:06 +08:00
@juice 嗯。解决方式我知道。只是想探讨一下 phalcon 中 PHQL 这样设计是为什么

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

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

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

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

© 2021 V2EX