PHQL update语法解析的疑问?

WBOY
Libérer: 2016-06-06 20:08:39
original
1080 Les gens l'ont consulté

先上demo代码(phalcon框架):

<code>$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();
    }
}</code>
Copier après la connexion
Copier après la connexion

通过监听phalcon的底层SQL生成,上述示例代码,会被解析成两个SQL语句:

<code>select * from cars where name='focus';

#此处的id=1是根据上一条select返回记录的主键值
update cars set price=15000.00 where id=1</code>
Copier après la connexion
Copier après la connexion

也就是说,PHQL底层在执行update语句时,会先根据条件查询相关记录,再根据相关记录的主键值去更新数据。

如果从查询优化的角度来说, 若是更新条件没有做索引处理,那必然会引起性能损耗。PHQL底层自动转化为以主键为更新条件,这也算是规避了这种风险。
但是从SQL执行的角度来看, 每一次更新操作,都需要执行两条SQL,这又算不算是另一种性能损耗了?
不知道这种处理方式算不算是一个坑 ?

回复内容:

先上demo代码(phalcon框架):

<code>$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();
    }
}</code>
Copier après la connexion
Copier après la connexion

通过监听phalcon的底层SQL生成,上述示例代码,会被解析成两个SQL语句:

<code>select * from cars where name='focus';

#此处的id=1是根据上一条select返回记录的主键值
update cars set price=15000.00 where id=1</code>
Copier après la connexion
Copier après la connexion

也就是说,PHQL底层在执行update语句时,会先根据条件查询相关记录,再根据相关记录的主键值去更新数据。

如果从查询优化的角度来说, 若是更新条件没有做索引处理,那必然会引起性能损耗。PHQL底层自动转化为以主键为更新条件,这也算是规避了这种风险。
但是从SQL执行的角度来看, 每一次更新操作,都需要执行两条SQL,这又算不算是另一种性能损耗了?
不知道这种处理方式算不算是一个坑 ?

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal