Php 更新查询(包括联接)需要55到59秒来更新表
我有一个名为notification的表,该表有近15000行数据。我有两个主要的东西,那就是userid和isRead。我想在用户单击“将所有通知标记为已读”时更新行。但是当用户点击标记为Read时,更新表或运行查询需要55到59秒。我正在用连接更新。这是我的问题Php 更新查询(包括联接)需要55到59秒来更新表,php,mysql,ajax,codeigniter,Php,Mysql,Ajax,Codeigniter,我有一个名为notification的表,该表有近15000行数据。我有两个主要的东西,那就是userid和isRead。我想在用户单击“将所有通知标记为已读”时更新行。但是当用户点击标记为Read时,更新表或运行查询需要55到59秒。我正在用连接更新。这是我的问题 UPDATE notification n , posts p SET n.isRead = 1 Where (n.post_id = p.id and p.userid = $userid) OR
UPDATE notification n
, posts p
SET n.isRead = 1
Where (n.post_id = p.id and p.userid = $userid)
OR n.toUser = $userid
and n.isRead = 0
我不知道为什么更新表行会花费太多时间,但是当查询在这段时间内执行时,我无法在查询处理期间移动到任何其他页面。我还在Post表中创建了userid、isRead和p.userid的索引,但仍然存在相同的问题。我不知道该怎么办
我在codeigniter中通过ajax使用此查询,但响应时间仍然相同
这是我的桌子结构
我怀疑你真的想要这样的东西:
UPDATE notification n
JOIN posts p
ON p.id = n.post_id
SET n.isRead = 1
WHERE :userid IN (n.toUser,p.userid)
有关查询优化的帮助,请提供上述说明以及两个表的SHOW CREATE TABLE语句。在
更新中使用或时,通常更快地将其分解为多个更新
UPDATE notification n
, posts p
SET n.isRead = 1
Where (n.post_id = p.id and p.userid = $userid)
UPDATE notification n
, posts p
SET n.isRead = 1
Where n.toUser = $userid
and n.isRead = 0
但是要小心x或y和z
与x或(y和z)
相同,而不是(x或y)和z
一旦您将其分为两个更新,然后检查您是否为每个更新都有最佳索引
p: INDEX(userId, id)
n: INDEX(toUser, isRead)
n: INDEX(postId)
它不起作用了。。。我想在会话中根据userid更新所有行。在查询中放置用户id的位置。如果我按照您发送给我的方式执行查询,它会显示0行生效。我看不到您的代码,因此无法真正注释我看到了一件未提及的事情:userid将要求您绑定用户id值,它只是一个占位符。或者在execute命令中发送用户id值。