我的数据库中有一个很大的表,并且我想要一个函数,例如执行UPDATE查询。
在以前的项目中,我曾经做过的工作是传递所有列的所有值,然后将它们插入查询字符串中,例如以下示例:
function updateUser($id, $name, $username){
$query = "UPDATE user SET name = '{$name}', username = '{$username}' WHERE id = '{$id}' ";
return mysqli_query($this->conn, $query);
}
意思是说,每一列都被更改了,即使那些没有更改的列也是如此。
但是,这一次是一个大表,我不想牺牲应用程序的速度。
我想做的是进行一些比较,从而优化查询,然后将其发送到数据库。
停留在之前的UPDATE查询示例中,这是我要执行的操作:
function updateUser($old_user, $new_user, $user_id){
$changed = false;
$oldFirstName = $old_user->getFirstName();
$newFirstName = $new_user->getFirstName();
if($oldFirstName == $newFirstName){
$firstNameQuery = "";
}else{
$firstNameQuery = " first_name = '".mysqli_escape_string($this->conn, $newFirstName)."',";
$changed = true;
}
$oldLastName = $old_user->getLastName();
$newLastName = $new_user->getLastName();
if($oldLastName == $newLastName){
$lastNameQuery = "";
}else{
$lastNameQuery = " last_name = '".mysqli_escape_string($this->conn, $newLastName)."',";
$changed = true;
}
$oldEmail = $old_user->getEmail();
$newEmail = $new_user->getEmail();
if($oldEmail == $newEmail){
$emailQuery = "";
}else{
$emailQuery = " email = '".mysqli_escape_string($this->conn, $newEmail)."',";
$changed = true;
}
if($changed){
$query = "UPDATE user SET {$firstNameQuery}{$lastNameQuery}{$emailQuery} WHERE user_id = {$user_id}";
return mysqli_query($this->conn, $query);
}else{
return 0;
}
}
正如您所看到的,随着表的增长,此功能变得越来越大,并且具有更多的比较和归因。
我的问题是:我是否节省了很多时间来执行此操作,或者它不是whoth吗?
你可能会使得代码更少效率。更新的大部分时间都在记录事务并物理存储每个记录的数据页。因为一条记录的所有列(通常)都存储在单个页面上,所以更新一列或多列无关紧要。
另一方面,应用程序中的其他比较也需要时间。
当然,与任何与性能相关的问题一样,您可以测试不同的方案。通过这种逻辑来减少更新中的列数,我不会期望性能有任何显着的提高,除非它完全消除了更新某些行的需要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句