2014-04-30 3 views
1

글쎄, 누군가가 나를 도울 수 있기를 희망하는이 문제가있다 :UPDATE 문이 너무 오래 걸린다

그럼 뭐야?

데이터베이스의 폴더에서 XML 파일을 가져 오는 개발 된 PHP 스크립트가 있습니다. this- XML file

는 기본적으로 스크립트는 5 개 테이블에서 XML 파일에서 정보를 저장처럼

XML 파일을보고, 그 올바르게 작동합니다.

$sql = "SELECT igraci.ID, utakmice.Player_ID, utakmice.ID AS broj FROM igraci LEFT JOIN utakmice ON (igraci.Team_ID = utakmice.Team_ID) AND (igraci.Surname = utakmice.Lastname) AND (igraci.Name = utakmice.Firstname);"; 
$tabela = mysql_query($sql); 

$row = mysql_fetch_assoc($tabela); 
$totalrow = mysql_num_rows($tabela); 
$i=0; 
do { 
    $i++; 
    $sql = "UPDATE utakmice SET Player_ID=" . $row['ID'] . " WHERE ID = " . $row['broj'] . ""; 
    echo $sql."<br>"; 
    mysql_query($sql); 
} while ($row = mysql_fetch_assoc($tabela)); 

는 선택 문이 정말 빨리 실행되고, 내가 가진 : 그러나 문제는 내가 데이터베이스에 모든 것을 가져 오면 그래서 내 파일 내가이 쿼리를 실행해야하는 플레이어 객체에서 플레이어의 ID 정보를 포함하지 않는다는 것입니다 문제는 없지만 UPDATE 명령으로 스크립트가 시간 초과되었습니다. 이 QUERY 색인에 사용 된 필드를 만들었지 만 도움이되지 않아 2200 개 이상의 행이 생기면 스크립트가 실패합니다. 이전 버전의 php에서는 스크립트가 정상적으로 실행되었지만 지난 달에 5.3으로 업그레이드해야하고 문제가 발생한 곳에서 업그레이드해야했습니다. 이 업데이트 속도를 높일 수있는 방법이 있습니까?

추 신 : XML 파일은 FIBA ​​live Cms 시스템에서 가져온 것입니다.

+0

. 일부 SQL 실행 시간이 줄어 듭니다. –

답변

0

는 PHP 스크립트 시간 초과가 : 당신이 뭔가를 얻을 것 결국

?

SELECT 대신 많은 수의 업데이트가 필요합니까?

당신은 단지 하나의 UPDATE 문이 같은 것을 사용 할 수 없습니다 : -

당신이 테이블에`ID`에 대해 하나 개의 기록이 경우 업데이트 쿼리에`LIMIT를 1` 사용할 수 있습니다
UPDATE utakmice 
INNER JOIN igraci 
ON (igraci.Team_ID = utakmice.Team_ID) 
AND (igraci.Surname = utakmice.Lastname) 
AND (igraci.Name = utakmice.Firstname) 
SET utakmice.Player_ID = igraci.ID 
+0

전체 데이터베이스에 대해 2 초 만에 실행됩니다. – iGoogle

0

WHERE 부분을 가속화하기 위해 utakmice.IDINDEX을 추가하십시오.

성능 실행에 대한 확실하지 않은 경우 :이 인덱스를 사용하거나 설정에서 제외하고 전체 테이블 스캔 (인덱스가 좋은, 테이블 스캔 속도가 느린)

0

을하고있어 경우

EXPLAIN SELECT * FROM utakmice WHERE ID = [x] 

보기 ID에 대한 색인을 작성하면 here에 설명 된대로 일괄 처리를 시도 할 수 있습니다.

필요한 경우 대소 문자를 연결하여 쿼리를 준비해야합니다. 시도해 볼만한 가치가 있지만 성능 테스트를 수행하지 않았기 때문에 여기에 큰 도움이 될지 알 수 있습니다.

UPDATE utakmice SET title = CASE 
    WHEN id = <your_first_broj_from_result> THEN <your_first_id_from_result> 
    WHEN id = <your_second_broj_from_result> THEN <your_second_id_from_result> 
    ... 
END 
WHERE id IN (<your_first_broj_from_result>, <your_second_broj_from_result>,...) 
관련 문제