2010-07-17 7 views
0

2 개의 mysql_query 호출에서이 쿼리를 실행하고 있습니다. 나는 가장 실적이 좋은 것을 하나의 쿼리에서 실행하고 싶다. 사람이 날 위해 최적화 할 수 있습니다나를 위해이 SQL 쿼리를 최적화 할 수 있습니까?

if(mysql_num_rows(eq("select * 
         from player_data 
         where uid = $uid")) == 0) 
     eq("update player_data 
      set uid = $uid, 
       `stat`= REPLACE(`stat`, '$temp_uid', '$uid') 
      where uid = $temp_uid"); 

참고 : 당량는 mysql_query

답변

0
if(mysql_num_rows(eq("select 1 from player_data where uid=$uid")) == 0) 
     eq("update player_data set uid=$uid, `stat`=REPLACE(`stat`, '$temp_uid', '$uid') where uid=$temp_uid"); 

단지 래퍼 함수 그냥 테이블의 행의 수를 얻으려면 select *을 피합니다.

eq("update player_data 
     set uid = $uid, 
      `stat`=REPLACE(`stat`, '$temp_uid', '$uid') 
    where uid=$temp_uid 
     and not exists (select * 
         from player_data 
         where uid = $uid)"); 
+0

당신은 포인트를 가지고 있지만, 하나의 쿼리가 여전히 유리하다. –

2

당신은 시도 할 수 있습니다. 모든 것을 선택하는 것은 성능면에서 끔찍합니다.

+0

exists-clause 안에는 결과 집합을 생성하지 않기 때문에'select *'를 사용할 수있다. – Joni

+0

EXISTS의 SELECT는 결코 실행되지 않습니다. EXISTS는 첫 번째 일치에서 true를 반환합니다. 'EXISTS (SELECT 1/0 ...) '로 바꿀 수 있으며, 0으로 나누기 오류를받지 못할 것입니다. –

+0

+1 : 검색어 수가 적을수록 좋습니다. –

0

윌 A의 대답은 아주 좋은, 당신이 선택해야 할 경우 필드를 지정

관련 문제