Php MySQL是否应该经常更新日期字段,即使该值不变?

Php MySQL是否应该经常更新日期字段,即使该值不变?,php,mysql,performance,Php,Mysql,Performance,用户每次登录时,最后一次登录日期都会更新 UPDATE `last_login` SET `date`= CURDATE() WHERE `user_id` = $login 如果用户在一天内登录10次,则日期字段将以完全相同的日期更新10次 问题:如果在更新日期之前,我检查该字段中的值是否不同于CURDATE(),并且仅在这种情况下更新它,是否有任何性能优势? 它将减少不必要的更新数量,但会为每个单独的登录添加额外的DB行程。只需为此添加一个条件即可 UPDATE `last_login

用户每次登录时,最后一次登录日期都会更新

UPDATE `last_login` SET `date`= CURDATE() WHERE `user_id` = $login
如果用户在一天内登录10次,则
日期
字段将以完全相同的日期更新10次

问题:如果在更新
日期之前,我检查该字段中的值是否不同于
CURDATE()
,并且仅在这种情况下更新它,是否有任何性能优势?
它将减少不必要的更新数量,但会为每个单独的登录添加额外的DB行程。

只需为此添加一个条件即可

  UPDATE `last_login`
  SET `date`= CURDATE()
  WHERE `user_id` = $login
  AND `date` <> CURDATE()       << that one
更新“上次登录”`
SET`date`=CURDATE()
其中`user\u id`=$login

和'date`CURDATE()在理想的登录审核中,您应该使用datetime记录每个登录,只需更新即可为您提供用户上次登录的时间,但历史审核将不在那里。在我的情况下,日期就足够了,因为只需查看用户是否在过去6个月内登录,否则帐户将被停用。谢谢你的建议。问题是这样做的好处。这个查询将产生额外的比较。更新/选择还取决于索引(即,如果该字段存在),它将产生额外的比较,但它将减少每个用户每天10次此类数据更新,并且不需要索引,因为我确定用户id已被索引(或主要)因此,只要
user\u id
不用于选择,它就已经是为该比较返回的一行,不需要为其编制索引,但将用于更新(因为即使索引不会用于选择,也应该重新构造以进行更新).
1000
每天登录
5
的用户将使用此简单条件每天减少
4000
更新,从而减少
120K
每月更新:因此受益。