Mysql 更新是否比插入更有效?
我遇到了一个PHP论坛软件,它每小时更新其线程视图。Mysql 更新是否比插入更有效?,mysql,performance,insert,Mysql,Performance,Insert,我遇到了一个PHP论坛软件,它每小时更新其线程视图。 因此,每次查看线程时,都会将一行插入到具有线程id的threadviews表中,然后脚本每小时运行一次,并更新thread表中的实际视图计数 我的问题是,这背后的逻辑是什么?为什么不更新线程表(即视图=视图+1)?更新通常比插入慢得多,您可以将更新视为删除和插入。更新可能需要锁定以支持DBMS的ACID遵从性,而插入时您并没有任何锁定 另外,由于并发性,您不希望锁定行,并等待更新完成,想想看,发生了什么,当您更新时,您会得到一个新的访问者,您
因此,每次查看线程时,都会将一行插入到具有线程id的threadviews表中,然后脚本每小时运行一次,并更新thread表中的实际视图计数
我的问题是,这背后的逻辑是什么?为什么不更新线程表(即视图=视图+1)?更新通常比插入慢得多,您可以将更新视为删除和插入。更新可能需要锁定以支持DBMS的ACID遵从性,而插入时您并没有任何锁定
另外,由于并发性,您不希望锁定行,并等待更新完成,想想看,发生了什么,当您更新时,您会得到一个新的访问者,您将失去该访问者。这称为丢失更新。另一方面,cron作业每小时聚合一次访问和更新,因为该行是只读的,所以写锁定不会影响更新期间的读取。更新通常比插入慢得多,您可以将更新视为删除和插入。更新可能需要锁定以支持DBMS的ACID遵从性,而插入时您并没有任何锁定
另外,由于并发性,您不希望锁定行,并等待更新完成,想想看,发生了什么,当您更新时,您会得到一个新的访问者,您将失去该访问者。这称为丢失更新。另一方面,cron作业每小时聚合一次访问和更新,因为该行是只读的,所以写锁定不会影响更新期间的读取。插入可能总是更快。像这样看 更新首先是搜索所有要更新的帖子。在一些表格中,这可能需要很长的时间,但如果有上帝指数,它应该很快。然后是数据的更新,每次更新都需要检查表约束,并可能更新索引
插入的与未搜索的相同。还必须对照约束和更新索引检查一行(或者可以多行,但实际上不止一行插入…)。插入可能总是更快。像这样看 更新首先是搜索所有要更新的帖子。在一些表格中,这可能需要很长的时间,但如果有上帝指数,它应该很快。然后是数据的更新,每次更新都需要检查表约束,并可能更新索引
插入的与未搜索的相同。还必须根据约束和更新索引检查始终是一行(或者可能是多行,但实际上是多行插入…)。可能是为了避免每次读取时锁定线程行,从而避免仅为读取使用争用点。可能是为了避免每次读取时锁定线程行,这样就避免了一个争用点仅仅用于读取。好吧,但从我所看到的,它并没有慢多少。我的意思是,它可能会慢几倍,但这不是一个小的性能损失,因为查询的运行时间很快吗?对于小数据,它不会感觉慢,一旦数据变大,并且您有太多的访问者,那么您会感觉到不同,并且会遇到并发问题。看看我的更新。好吧,但从我所看到的,它并没有那么慢。我的意思是,它可能会慢几倍,但这不是一个小的性能损失,因为查询的运行时间很快吗?对于小数据,它不会感觉慢,一旦数据变大,并且您有太多的访问者,那么您会感觉到不同,并且会遇到并发问题。查看我的更新。