我正在计时网站“初始化”代码的各个部分(包括验证用户是否登录、连接到数据库、导入功能......)
此查询目前独自占用了总初始化时间的一半以上:
$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
首先读取用户数据、验证 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