php - mysql中如何有一个优化和良好的更新语句?

标签 php mysql

我想编写一条语句,例如将 is_new 更新为 0,并使用 mail.user_id=$user.id 等条件。

update mails set `is_new=0` WHERE `mails.user_id=$user.id`

我是否应该添加另一个条件来防止更新 is_new 已等于零的记录?像这样

update mails set is_new=0 WHERE mails.user_id=$user.id and is_new!=0

哪种说法最好?你认为还需要有第二个条件吗?

最佳答案

作为一个非常普遍的原则,我将 UPDATE 查询构造为仅“触摸”实际需要触摸的记录。在我看来,这较少是出于性能原因,更多的是出于可读性原因:查询的后一种形式更准确地说明了您想要执行的操作 - 即,您想要设置 is_new=0仅那些 is_new 尚未为 0 的记录。因此,仅出于这个原因,我认为应该存在额外条件。

更笼统地说,有一句著名的计算机科学名言:“过早优化是万恶之源”。在使用 MySQL 查询时,我并不总是同意这句话,但它提出了一个重要的观点:如果您对是否优化某些内容感到困惑,并且您还没有真正尝试过这两种格式,并且/或采取测量来确定优化会产生多大的差异,这是在浪费时间。如果您在不知道优化会产生什么差异的情况下进行优化,您唯一确定的结果是让你的工作变得更加复杂。

因此,在您知道(或有充分理由相信)优化会产生影响之前,请勿出于性能原因进行优化。但始终出于可读性和标准化原因进行优化,因为您确实知道人们将来必须阅读您的代码。至少这是我的规则。

关于php - mysql中如何有一个优化和良好的更新语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29970228/

相关文章:

php - 长轮询导致数据库错误

javascript - 每周增加两次数量

php - 有没有办法让 PHPUnit 确定 @method 声明的代码覆盖率?

mysql - 在 'between' 子句中混合两列

php - 无法使用PHP将数据从excel上传到mysql

php - Codeigniter num_rows() 返回 0,相同的查询返回 1

php - fopen() 无法打开流 : Permission denied in

javascript - 无法运行 php 代码, Angular 路由问题

mysql - 允许 MySQL 用户访问选择所有 View ,但不能选择表

javascript - 尝试从 mysql 数据库传递信息以做出 native react