我们平常写代码的时候,无疑都会接触大量的数据CURD操作。第一反应是这太简单了,那么你在编写UPDATE操作的时候是怎样的逻辑呢?比较下面两段伪代码:
code exp.1
$SQL = "UPDATE `table_name` SET `a`='A', `b`='B', `c`='C' WHERE `id`=$id ";
$res = $db->query ($SQL);
if ($res) {
return TRUE;
} else {
return FALSE;
}
code exp.2
$SQL = "SELECT `a`,`b`,`c` FROM `table_name` WHERE `id`=$id ";
$old = $db->query ($SQL)->fetch ();
if ( $old['a'] == $a && $old['b'] == $b && $old['c'] == $c ) {
return TRUE;
}
$SQL = "UPDATE `table_name` SET `a`='$a', `b`='$b', `c`='$c' WHERE `id`=$id ";
$res = $db->execute ($SQL);
if ($res) {
return TRUE;
} else {
return FALSE;
}
============
如果单纯从查询次数来看,exp.1
始终是一次,而exp.2
是 1~2次。看起来exp.1
更好一些,我也觉得在一些简单应用场景确实是这样的。可是如果在一个大型应用,每次用户的UPDATE都执行一次写入操作真的好吗?
这种情况下可以适当牺牲一些读操作以减少写入操作,首先在数据缓存上可以拦截大部分数据库读取请求,其次在数据库层面可以配置主从集群负载均衡等策略保证读取性能。所以我认为大型应用还是exp.2
更合适。
以上个人感想,欢迎批评指正