저속 쿼리 로그에서 자르기를 계속하는 매우 간단한 쿼리가 있습니다. 때 그것은 일반적으로 쿼리에 약 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';
업데이트시 사용자 정보를 사용해야하므로이 업데이트를 사용해야합니다.
데이터베이스 구조는 다음
company_users 0 PRIMARY 1 개 ID 197 \ N \ N BTREE
company_users 1 indx_userid 1 아이디 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 스크립트를 사용하여 실행됩니다.
내가 잘못하고있는 부분이나 내 구성을 조정할 수있는 부분에 대한 정보가 충분하기를 바랍니다.
업데이트 : 데니스 (Dennis)의 제안에 따라 느린 쿼리 로그를 다시 살펴본 후 시간 프레임에 대해 세 개의 명령문이 기록되었음을 알게되었습니다.
Query_time : 5 Lock_time : 0 Rows_sent : 0 Rows_examined : 0
Query_time : 5 Lock_time : 0 Rows_sent이 위에서 확인 된 업데이트 문의 동일한 유형이었다 그들 중 두 가지에 대한 정보했다 : Rows_examined 0 : 0
Query_time 4 Lock_time : 0 Rows_sent 1 Rows_examined는 1
이 마지막 동일한 테이블에 대해 선택되었다. 나는 (내가 업데이트에서 해당 작업을 수행하는 방법을 모르는 등)이 select 문에 분석했고, 그것을 보여 주었다 :
아이디 SELECT_TYPE 테이블 유형이 possible_keys 키있는 key_len 심판 행이 SIMPLE company_users의 CONST이 indx_imei 22 CONST 1
을 indx_imei Extra1
300 개의 행이있는 테이블의 경우 쿼리가 인덱스 없이도 실행되어야합니다. 그러나'user_id'에 대한 색인은 앞으로 유용 할 것입니다 (이미 가지고 있습니다). – newtover