サイトの「初期化」コードのさまざまな部分のタイミングを調整しています(ユーザーがログインしていることの確認、データベースへの接続、関数のインポートなどを含む)
このクエリは現在、初期化時間全体の約半分を占めています。
$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()
てみましたが、違いはありませんでした。実際、最初は4ミリ秒ではなく13ミリ秒かかりました...)
編集:要求に応じて:
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