>백엔드 개발 >PHP 튜토리얼 >mysql_php 팁으로 대량의 데이터를 가져오는 PHP의 성능 최적화 팁

mysql_php 팁으로 대량의 데이터를 가져오는 PHP의 성능 최적화 팁

WBOY
WBOY원래의
2016-05-16 20:27:071321검색

이 기사의 예에서는 PHP에서 MySQL로 대량의 데이터를 가져오기 위한 성능 최적화 기술을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

mysql에서는 php를 결합하여 일부 파일을 mysql로 ​​가져옵니다. 여기서는 가져올 때 15,000개의 레코드를 분석하고 최적화하는 방법을 공유합니다.

이전에 기사가 몇 편 있었는데, 최근 Tiandi가 친구의 전화번호 계산을 위한 작은 프로젝트를 돕고 있었다고 합니다. 그때마다 필요에 따라 패키지된 전화번호가 데이터베이스에서 무작위로 생성되었습니다. 사람들은 끊임없이 이런 전화를 걸었습니다. 전화번호는 제품을 판매합니다(이러한 행동에 대한 약간의 경멸). 하지만 친구가 도움을 요청하면 우리는 도와줘야겠죠? 해당 프로그램은 2주 전 완료돼 테스트를 거쳐 인계됐다. 며칠 전에 친구가 전화해서 매일 전화번호를 가져오는 데 시간이 점점 더 오래 걸린다고 하더군요. 때로는 10,000개의 기록을 가져오는 데 30분도 넘게 걸립니다. 개선할 수 있는 방법이 있는지 알아보고 싶습니다. 속도.

잠시 생각해보니 데이터베이스 구조는 매우 간단합니다. 한 필드에는 전화번호가 저장되고 다른 필드에는 카테고리가 저장됩니다. , e 등은 전화가 걸렸음을 나타냅니다. 이 전화는 전화가 걸리지 않았습니다. 이 전화는 전화가 걸리지 않았습니다.

■전화번호가 포함된 txt 파일을 받으세요

■프로그램을 통해 txt 파일을 mysql로 ​​가져오기

■가져올 때 txt의 전화번호가 mysql의 전화번호와 중복되는지 확인하세요. 중복되지 않으면 직접 새 레코드를 삽입하세요. 카테고리에 따라 업데이트가 필요합니다. 전화번호가 속해있습니다.

txt의 각 전화번호를 가져올 때 비교해야 하기 때문에 프로그램은 확실히 시간이 걸릴 것입니다. 이 기사의 제목은 쓰기 속도를 최적화하기 위한 것이므로 이 이유는 먼저 제쳐두겠습니다. 프로그램 기록이 남을까요? 위의 논리에서 우리는 데이터베이스를 일치시킬 때 레코드가 없을 때 데이터베이스에 대한 쓰기 작업이 발생한다는 것을 알고 있습니다(물론 업데이트도 계산되지만 여기서는 삽입만 논의됩니다). 그런 다음 위의 논리를 코드로 변환합니다. 대략 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
//$array는 txt 파일에서 각각 분해된 배열입니다. 는 전화번호이고, $str은 유형입니다
for($i=0; $i {
$tmpstr = "'". $array[$i] ."','". $str ."'";            $sql="INSERT INTO ".$usertable." (tel,type) 값 (".$tmpstr.")"
MySQL_query($sql)
}
위의 코드는 완전히 정확하지만 txt 파일에 수만 개의 전화번호가 포함되어 있으면 수만 개의 데이터베이스 삽입 작업이 발생하지만 각 데이터베이스 쓰기 작업은 수만 개가 발생합니다. 기록이 누적되기 때문에 이 실행 시간은 무시할 수 없습니다. Tiandi는 1억 5천만 개의 기록을 삽입하는 데만 테스트했는데, 이전의 논리적 판단과 기타 프로세스를 추가하면 실제로는 그리 긴 시간이 아닙니다. 불가능하므로 데이터베이스에 대한 쓰기 횟수를 줄여야 하므로 위 코드는 다음과 같이 변경됩니다.

코드 복사 코드는 다음과 같습니다.
$sql2="INSERT INTO ".$usertable." (tel, 유형, 업데이트 시간 ) VALUES";
for($i=0; $i {
$tmpstr = "'". $array[$i] ."','". $str ."'"; $sql2 .= "(".$tmpstr."),"
}
$sql2 = substr($sql2,0,-1); //마지막 쉼표 제거
mysql_query($sql2);

이렇게 하면 전체 쓰기 작업이 한 번만 수행되므로 실행 시간이 크게 단축됩니다. 15,000개의 레코드를 완료하는 데 거의 10초가 소요됩니다. mysql에 데이터를 저장한다면, 이 글의 최적화 방법을 시도해 보세요.

이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.