V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Marser
V2EX  ›  PHP

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

  •  1
     
  •   Marser · 2016-05-16 15:31:02 +08:00 · 3266 次点击
    这是一个创建于 3141 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    2 条回复    2016-05-17 10:46:06 +08:00
    juice
        1
    juice  
       2016-05-17 00:09:56 +08:00
    可以用原生的 SQL 代替
    Marser
        2
    Marser  
    OP
       2016-05-17 10:46:06 +08:00
    @juice 嗯。解决方式我知道。只是想探讨一下 phalcon 中 PHQL 这样设计是为什么
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2555 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:30 · PVG 12:30 · LAX 20:30 · JFK 23:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.