2012-12-14 3 views
0

큰 배열을 mySQL DB에 저장하는 가장 좋은 방법은 무엇입니까?mySQL에 큰 배열 저장

먼저 용액

INSERT INTO `friendList` (`userId` , `friendId` , `friendName`) VALUES 
    ('1', '3242343', 'bernd'), 
    ('1', '3242342', 'jusu'); 

또는 foreach는

제 용액

foreach (xxxx) { 
    mysql_query("insert xxxx"); 
} 

제 용액 오른쪽 서버 (더 청소기 등 부담없는 함께?),하지만이 insert 명령을 작성하는 방법은 무엇입니까?

답변

1

가 가장 빠른이 여러 삽입 구문을 사용하는 것입니다 사용하지만, 그게 내가 추천 게 아니에요 성능이 정말로 중요하지 않으면 대부분의 사람들에게 최대 쿼리 크기 (서버간에 변경 될 수 있음)를 초과하지 않도록주의해야합니다.

그러나, 당신은 준비된 문 (PDO 예)와 함께이 작업을 수행 할 수 있으며, 여전히 합리적인 성능을 얻을 :

$db = new PDO($dsn, $user, $password, array(
    PDO::ATTR_EMULATE_PREPARES => false, 
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
)); 

$stmt = $db->prepare('INSERT INTO `friendList` (`userId` , `friendId` , `friendName`) VALUES (?, ?, ?)'); 

foreach ($data as $row) { 
    $stmt->execute(array($row['id'], $row['friendid'], $row['friendname'])); 
} 
0

스토어 CSV 파일의 모든 데이터 또는 텍스트 파일은 (당신이 설명한대로) LOAD DATA INFILE

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' 
[REPLACE | IGNORE] 
INTO TABLE tbl_name 
[FIELDS 
    [TERMINATED BY '\t'] 
    [[OPTIONALLY] ENCLOSED BY ''] 
    [ESCAPED BY '\\' ] 
] 
[LINES 
    [STARTING BY '']  
    [TERMINATED BY '\n'] 
] 
[IGNORE number LINES] 
[(col_name,...)] 
+0

정말 텍스트 파일 좋은 생각을? 그렇다면 json 문자열을 저장하는 것이 좋습니다. BTW : 내 배열의 최대 항목은 4000입니다. – user1815934

+0

쿼리가 json 파일과 작동하지 않습니다. 파일에서 쓰기가 db에서 쓰기보다 빠르기 때문에 파일에 4000 줄을 쓰는 것이 빠릅니다. – ke20

+0

니스! 전에 이걸 사용 해본 적이 없어요. 이것은 오래된 스레드이지만 호기심에서 벗어난 것입니다. 파일에 데이터를 쓰려면 변수에 할당 된 값을 포함하는 PHP 파일을 작성하고 필요할 때 포함시키는 것이 더 쉽지 않습니까? – Chris