我在MySQL Server中使用一个简单的UPDATE
查询。
通常,我使用的SELECT
查询会在大约瞬间返回结果。然而,在执行一次UPDATE
查询之后,整个连接开始变慢,从那一刻起,加载SELECT
查询的结果大约需要5-10秒。
$time = time();
$stmt = $mysqli->stmt_init();
if( $stmt = $mysqli->prepare( "UPDATE users SET last_online = ? WHERE username = ?" ) )
{
$stmt->bind_param( 'is', $time, $_POST['username'] );
$stmt->execute();
}
$stmt->close();
你知道为什么这会减缓联系吗?
附言:它还降低了其他用户的连接速度。
p.p.S:每个用户每13分钟执行一次更新。
编辑
当直接从MySQL执行时,速度也会减慢。
一种可能性是username
上没有索引。然后,查询将需要一个完整的表扫描,从而降低速度。您可以通过以下操作创建这样的索引:
create index idx_users_username on users(username);
我发现了这个问题。SELECT
查询中的一个触发了与users
表组合的另一个表。该表包含大量数据,并且使用了代价高昂的ORDER BY .. DESC
语句。现在问题解决了。
也许每次执行UPDATE
查询时都必须更新缓存。