Php 为什么这个查询异常长?

Php 为什么这个查询异常长?,php,mysql,time,Php,Mysql,Time,我正在对网站“初始化”代码的各个部分进行计时(包括验证用户是否登录、连接到数据库、导入功能……) 目前,该查询本身大约占用了总初始化时间的一半: $sql = "update `users` set `lastclick`=now(),".(substr($_SERVER['PHP_SELF'],0,6) == "/ajax/" ? "" : " `lastactive`=now(),")." `lastip`='".addslashes($_SERVER['REMOTE_ADDR'])."'

我正在对网站“初始化”代码的各个部分进行计时(包括验证用户是否登录、连接到数据库、导入功能……)

目前,该查询本身大约占用了总初始化时间的一半:

$sql = "update `users` set `lastclick`=now(),".(substr($_SERVER['PHP_SELF'],0,6) == "/ajax/" ? "" : " `lastactive`=now(),")." `lastip`='".addslashes($_SERVER['REMOTE_ADDR'])."' where `id`=".$userdata['id'];
生成查询根本不需要时间,问题在于运行。结果查询示例:

update `users` set `lastclick`=now(), `lastactive`=now(), `lastip`='192.168.0.1' where `id`=1
足够简单的查询,对吗?我是目前服务器上唯一的用户,实际上没有其他任何东西在运行。那么,为什么一个简单的更新要比连接到数据库、
SELECT
ing用户数据、验证cookie和定义一系列功能所需的时间要多呢

(我刚试着用一个文本值替换
now()
,但这没有什么区别——事实上,第一次用的是13毫秒,而不是4毫秒…)


编辑:根据要求:

explain select * from  `users` where `id`=1
1 row returned

id select_type table type  possible_keys key     key_len ref   rows Extra
1  SIMPLE      users const PRIMARY       PRIMARY 4       const 1

解开了我自己的谜团。结果表明,正在更新的一个字段(
lastactive
)位于索引中,重建该索引的速度较慢

由于该索引唯一可以使用的时间是更新在线用户列表,并且只能由cron每隔一段时间更新一次,因此我删除了该索引,现在查询的运行速度大大加快


感谢那些试图帮助我的人——你确实间接地帮我找到了问题

如果您可以通过命令行或类似的方式访问数据库,我会这样做:解释更新
用户
设置
lastclick
=now(),
lastactive
=now(),
lastip
=192.168.0.1',其中
id
=1;这将为您提供更多信息,这将有助于找出缓慢查询的来源。如果你不明白输出的意思,就把它贴在你原来的帖子里,我们会更好地帮助你。你想解释一下吗?我想您在
id
列上有索引吧?您是否尝试过分析查询@EmmanuelG:
EXPLAIN
仅适用于
SELECT
,但对于id=1的用户,
EXPLAIN-SELECT*可能值得在MySQL 5.6中对更新语句执行
EXPLAIN-SELECT*。也许以前没有@EmmanuelG:I stand correct.
EXPLAIN
为select添加的结果-尝试更新时出现语法错误。