更新代码
$stmt_update = $db->prepare( '
UPDATE table SET Column = 1
WHERE Id = 17
' );
$stmt_update->execute( );
需要~25毫秒
但是
$stmt_select = $db->prepare( '
SELECT
`Text`,
`NameOfPerson`,
`EmailOne`,
`Phone`,
`EmailTwo`
FROM table_name
WHERE Id = ?
' );
$stmt_select->execute( array( trim( $_GET["two"] ) ) );
这需要~1毫秒。
这是正常的(这种差异)?任何想法如何更快地更新(执行得更快)?
答案 0 :(得分:2)
这是有道理的。但是,您需要了解有关衡量绩效的一些事项。第一个查询可能是将数据读入内存。这需要一点时间。当您运行第二个查询时,它已经存在。通常,第二次运行完全相同的查询比第一次更快 - 除非您在服务器上使用缓存选项。
update
会变慢,因为数据库具有所谓的ACID属性。这意味着直到数据库确定更新才会完成,因为更改已经完成。通常,这意味着将日志事务提交到磁盘,因此您正在等待磁盘写入完成。磁盘写入启动还不够 - 必须完成。这也意味着update
已获取正在更新的表部分的锁。
此外,数据库最终必须将实际修改的数据页写入磁盘。在MySQL中,这可能取决于存储引擎。所以,你可能在等待它。
select
不会修改任何内容。它只是读。所以有一段时间来获取数据,但只要它在内存中,查询就可以处理并完成。
此外,update
可能会为数据库引擎生成其他工作 - 例如更新索引和运行触发器。目前还不清楚这些是否在您的桌子上定义。
所以,我希望update
花费的时间超过select
。