2014-07-18 3 views
1

그래서이 후 적절한 칼럼에 입력 데이터를 통해 루프로이 코드를 사용하는 배열로를 구성하는 텍스트 파일을 판독하는 스크립트/MySQL 서버 내부 행 : 아웃MySQL 데이터베이스를로드하는 것이 더 나은 방법은 무엇입니까?

$size = sizeof($str)/14; 
$x=0; 

$a=0; $b=1; $c=2; $d=3; $e=4; $f=5; $g=6; $h=7; $i=8; $j=9; $k=10; $l=11; $m=12; $n=13; 

mysql_query('TRUNCATE TABLE scores'); 


do { 

$query = "INSERT INTO scores (serverid,resetid, rank,number,countryname,land,networth,tag,gov,gdi,protection,vacation,alive,deleted) 
    VALUES ('$str[$a]','$str[$b]','$str[$c]','$str[$d]','$str[$e]','$str[$f]','$str[$g]','$str[$h]', 
     '$str[$i]','$str[$j]','$str[$k]','$str[$l]','$str[$m]','$str[$n]')"; 

mysql_query($query,$conn); 

$a=$a+14; $b=$b+14; $c=$c+14; $d=$d+14; $e=$e+14; $f=$f+14; $g=$g+14; $h=$h+14; $i=$i+14; $j=$j+14; $k=$k+14; $l=$l+14; $m=$m+14; $n=$n+14; 
$x++;  
} while ($x != $size); 


mysql_close($conn); 

이 코드 도면 파일이 텍스트 파일의 마지막 행에 도달 할 때까지 파일 크기가 모든 13 개의 열을 반복합니다. 실행될 때마다 DB를 지우고 새 데이터를로드합니다 (의도 한대로).

제 질문은 : 이것을 수행하는 좋은 방법입니까? 아니면 위의 코드와 똑같은 일을하는 더 빠르고 깨끗한 방법이 있습니까?

LOAD DATA LOCAL INFILE '$ myFile' "을 사용할 수 있습니까?"INTO TABLE ranksfeed_temp FIELDS TERMINATED BY ','동일한 작업을보다 효율적으로 수행 하시겠습니까? 당신의 생각은 무엇입니까? 내 코드를 더 효율적이고 빠르게 만들려고 노력하고 있습니다.

+2

PHP MySQL 계열은 사용되지 않으며 지원이 사라집니다. [PDO] (http://www.php.net/manual/en/book.pdo.php) 또는 [MySQLi] (http://php.net/manual/en/book.mysqli.php)를 살펴보십시오. . – ljacqu

답변

2

LOAD DATA는 csv와 같은 문자로 구분 된 파일을 가져 오는 것이 더 빠르고 효율적입니다. LOAD DATA는 대용량 파일을 MySQL 테이블로 가져 오기 위해 최적화되어 있습니다. 반면 텍스트 파일에서 행당 하나의 쿼리를 실행하는 경우에는 실행 속도가 매우 느립니다.

LOCAL 옵션은 MySQL-Server-Client Connection의 클라이언트 측에있는 파일에만 적용됩니다. MySQL로 직접 작동하는 컴퓨터에서 파일을로드하십시오.

삽입하기 전에 테이블에서 가능한 키를 비활성화하면 가져 오는 동안 속도가 향상 될 수 있습니다. 비활성화 된 키와 결과를 벤치마킹하지 않고 시도하십시오.

+0

예 myfile 것은 내가 거기에 넣은 일반적인 물건이었습니다. 실제 프로그램에서는 URL에서 파일을로드합니다. – Ryansworld84

관련 문제