Php 什么';在MySQL中,同步两个表中的行数据的最佳方法是什么? 我有两个表,为了方便起见,把下面的例子当作一个例子。 联系人(有姓名和电子邮件) 消息(需要将带有姓名和电子邮件的消息同步到联系人表)
现在,对于那些渴望说“使用关系方法”或外键等的人,我知道,但这种情况是不同的。我需要有一个“副本”的名称和电子邮件的消息表本身,需要同步它不时只 根据同步要求,我需要将消息中的姓名与联系人表中的最新姓名同步 对于Contacts表中的所有行,我基本上都有以下更新SQL循环Php 什么';在MySQL中,同步两个表中的行数据的最佳方法是什么? 我有两个表,为了方便起见,把下面的例子当作一个例子。 联系人(有姓名和电子邮件) 消息(需要将带有姓名和电子邮件的消息同步到联系人表),php,mysql,sql-update,Php,Mysql,Sql Update,现在,对于那些渴望说“使用关系方法”或外键等的人,我知道,但这种情况是不同的。我需要有一个“副本”的名称和电子邮件的消息表本身,需要同步它不时只 根据同步要求,我需要将消息中的姓名与联系人表中的最新姓名同步 对于Contacts表中的所有行,我基本上都有以下更新SQL循环 UPDATE messages SET name=( SELECT name FROM contacts WHERE email = '$cur_email') WHERE email='$cur_email' 上面的循环通
UPDATE messages SET name=(
SELECT name FROM contacts WHERE email = '$cur_email')
WHERE email='$cur_email'
上面的循环通过所有的触点,并触发尽可能多的触点
我也有一些循环的想法来做到这一点,而不使用内部SELECT
,但我只是认为上面的方法会更有效(是吗?),但我想知道是否有一种SQL方法更有效?比如:
UPDATE messages SET name=(
SELECT name FROM contacts WHERE email = '$cur_email')
WHERE messages.email=contacts.email
看起来像连接的东西?我认为它应该更有效
UPDATE messages m JOIN contacts n on m.email=n.email SET m.name=n.name
嗯。我现在明白了。。在更新时使用连接 比如: 这相当简单 但是。。。我不确定这是否真的是对我文章的回答,因为我的问题是在效率方面“最好的方法是什么” 在2000条记录上执行上述查询花了我的系统4秒钟的时间。。其中,执行一些select、php循环和一些update语句感觉速度更快 嗯 ------更新-------- 我继续写了两个脚本来测试这个 在我的QuadCore i7 Ivybridge机器上,令人惊讶 通过SQL连接执行单个更新查询要比执行多查询和循环方法慢得多 一方面,我在1000条记录上运行上面的简单查询,其中所有记录都需要更新 脚本执行时间为4.92秒!导致我的机器在一瞬间失灵。。注意到我的一个核心上有一个100%的尖峰 对脚本的后续调用(其中没有需要更新的字段)花费了相同的时间!荒谬的 另一方面,涉及到对所有需要更新的行的SELECT JOIN查询,以及在PHP中的foreach()函数中循环的简单更新查询 拿了剧本 3.45秒完成所有更新..@约50%的单芯尖峰 和 后续查询1.04秒(无需更新的字段) 案件结案 希望这对社区有帮助 ps 这就是我在与过分热衷于“编码标准”的程序员讨论某些逻辑时的意思。。他们的论点是“在SQL方面做”,如果可以的话,因为它更快,更符合标准,而不是在循环中计算和更新的粗糙方法,他们说这是“脏”代码。。嘘
UPDATE messages JOIN contacts ON messages.email=contacts.email
SET messages.email = contacts.email
WHERE messages.email != contacts.email