我有一個非常簡單的查詢,在我的慢查詢日誌中不斷出現。當它收穫時,它通常會說查詢花了大約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';
我必須使用userid比較,因爲這是我在更新時的信息。
數據庫結構是:
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
我有以下的索引:
company_users 0 PRIMARY 1個ID A 197 \ n \ n BTREE
company_users 1 indx_userid 1的userid A 197 \ n \ n BTREE
company_users 1 indx_location 1個位置A 12 \ n \ n YES BTREE
company_users 1 indx_scheduleid 1 scheduleid A 49 \ n \ n YES BTREE
company_us ers 1 indx_owneruserid 1 owneruserid A 197 \ N \ N BTREE
表中有大約300行。數據庫與我的網站位於同一臺服務器上。這些查詢使用PHP腳本運行。
希望這是足夠的信息來了解我可能做錯了什麼,或者我可以調整我的配置。
更新: 丹尼斯的建議後,我再看看我的慢查詢日誌,並注意到有三個對時間框架記錄的語句。這對他們兩個人的信息這是上面確定的相同類型的更新語句:
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 key_len ref行Extra1 SIMPLE company_users const indx_imei indx_imei 22 const 1
對於包含300行的表,即使沒有任何索引,查詢也應該執行。但是'user_id'上的索引在未來可能會很有用(你已經擁有它了)。 – newtover