Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 更新是否比插入更有效?_Mysql_Performance_Insert - Fatal编程技术网

Mysql 更新是否比插入更有效?

Mysql 更新是否比插入更有效?,mysql,performance,insert,Mysql,Performance,Insert,我遇到了一个PHP论坛软件,它每小时更新其线程视图。 因此,每次查看线程时,都会将一行插入到具有线程id的threadviews表中,然后脚本每小时运行一次,并更新thread表中的实际视图计数 我的问题是,这背后的逻辑是什么?为什么不更新线程表(即视图=视图+1)?更新通常比插入慢得多,您可以将更新视为删除和插入。更新可能需要锁定以支持DBMS的ACID遵从性,而插入时您并没有任何锁定 另外,由于并发性,您不希望锁定行,并等待更新完成,想想看,发生了什么,当您更新时,您会得到一个新的访问者,您

我遇到了一个PHP论坛软件,它每小时更新其线程视图。
因此,每次查看线程时,都会将一行插入到具有线程id的threadviews表中,然后脚本每小时运行一次,并更新thread表中的实际视图计数


我的问题是,这背后的逻辑是什么?为什么不更新线程表(即视图=视图+1)?

更新通常比插入慢得多,您可以将更新视为删除和插入。更新可能需要锁定以支持DBMS的ACID遵从性,而插入时您并没有任何锁定


另外,由于并发性,您不希望锁定行,并等待更新完成,想想看,发生了什么,当您更新时,您会得到一个新的访问者,您将失去该访问者。这称为丢失更新。另一方面,cron作业每小时聚合一次访问和更新,因为该行是只读的,所以写锁定不会影响更新期间的读取。

更新通常比插入慢得多,您可以将更新视为删除和插入。更新可能需要锁定以支持DBMS的ACID遵从性,而插入时您并没有任何锁定


另外,由于并发性,您不希望锁定行,并等待更新完成,想想看,发生了什么,当您更新时,您会得到一个新的访问者,您将失去该访问者。这称为丢失更新。另一方面,cron作业每小时聚合一次访问和更新,因为该行是只读的,所以写锁定不会影响更新期间的读取。

插入可能总是更快。像这样看

更新首先是搜索所有要更新的帖子。在一些表格中,这可能需要很长的时间,但如果有上帝指数,它应该很快。然后是数据的更新,每次更新都需要检查表约束,并可能更新索引


插入的与未搜索的相同。还必须对照约束和更新索引检查一行(或者可以多行,但实际上不止一行插入…)。

插入可能总是更快。像这样看

更新首先是搜索所有要更新的帖子。在一些表格中,这可能需要很长的时间,但如果有上帝指数,它应该很快。然后是数据的更新,每次更新都需要检查表约束,并可能更新索引


插入的与未搜索的相同。还必须根据约束和更新索引检查始终是一行(或者可能是多行,但实际上是多行插入…)。

可能是为了避免每次读取时锁定线程行,从而避免仅为读取使用争用点。可能是为了避免每次读取时锁定线程行,这样就避免了一个争用点仅仅用于读取。好吧,但从我所看到的,它并没有慢多少。我的意思是,它可能会慢几倍,但这不是一个小的性能损失,因为查询的运行时间很快吗?对于小数据,它不会感觉慢,一旦数据变大,并且您有太多的访问者,那么您会感觉到不同,并且会遇到并发问题。看看我的更新。好吧,但从我所看到的,它并没有那么慢。我的意思是,它可能会慢几倍,但这不是一个小的性能损失,因为查询的运行时间很快吗?对于小数据,它不会感觉慢,一旦数据变大,并且您有太多的访问者,那么您会感觉到不同,并且会遇到并发问题。查看我的更新。