私は非常に単純なクエリを持っています。それが起きると、通常、クエリには約3〜6秒かかると言われています。クエリは次のとおりです。私は簡単なmysqlクエリの速度を向上させる方法
UPDATE company_users
SET isonline=1, last_logon='2011-12-05 19:37:11', last_message=-1,
last_signal=-1, location=-1
WHERE userid='3546600442XXXXX';
私は更新時に持っていた情報と同じように、ユーザーID比較を使用する必要があります。
データベース構造は以下の通りである:
company_users 0 PRIMARY 1つのID 197 \ N \ N BTREE
company_users 1 indx_userid 1ユーザID 197 \ N:
Field Type Null Key Default Extra
id int(11) NO PRI \N auto_increment
userid varchar(20) NO MUL
version varchar(3) YES 37
owneruserid int(11) NO MUL 0
simcard_phonenumber varchar(20) YES \N
registration_date date YES \N
labelname varchar(20) YES \N
isonline smallint(6) YES 0
last_logon datetime YES \N
last_message int(11) YES 0
last_voltage int(11) YES 0
last_reboot datetime YES \N
connect_mode int(11) YES 1
scheduleid int(11) YES MUL -1
location int(11) YES MUL -1
img varchar(50) YES
Iは、以下のインデックスを持っています\ N BTREE
company_users 1 indx_location 1つの位置12 \ N \ N YES BTREE
company_users 1 indx_scheduleid 1 scheduleid 49 \ N \ N YES BTREE
company_us ers 1 indx_owneruserid 1 owneruserid A 197 \ N \ N BTREE
表には約300行あります。データベースは私のウェブサイトと同じサーバーにあります。これらのクエリは、PHPスクリプトを使用して実行されます。
うまくいけば、私は何が間違っているのか、どこで私の設定を調整できるのかを知るには十分な情報です。
UPDATE: Dennisの提案の後、私は遅いクエリログをもう一度見て、時間フレームに対して3つのステートメントが記録されていることに気付きました。
Query_time:5 Lock_time:0 Rows_sent:0 Rows_examined:0
Query_time:5 Lock_time:0 Rows_sentこれは、上記で特定した更新文の同じタイプだった二人のための情報でした。 0 Rows_examined:0
Query_time:4 Lock_time:0 Rows_sent:1 Rows_examined:1
この最後同じテーブル上に選択のためでした。私は(私はアップデートでそれを行う方法を知らなかったとして)、それが示したselect文に分析しました:
ID SELECT_TYPEのテーブル型possible_keysのキーkey_lenに参照行がEXTRA1 SIMPLE company_usersのconstが22 constの1
をindx_imei indx_imei
300行のテーブルの場合、クエリはインデックスがなくても飛ぶ必要があります。しかし、 'user_id'のインデックスは、将来(あなたは既にそれを持っています)役に立つかもしれません。 – newtover