수천 개의 레코드를 삽입하고 싶습니다.이 레코드가 빠를 필요가 있습니다. 나는이 문제에 대해 많이 읽었으므로 나의 오래된 접근법 (mysql_connect)을 삭제하고 prepare 문과 mysqli를 사용하기로 결정했다. 그래서 이것의 속도를 테스트하기 위해 다음과 같이 씁니다. mysql에 천개의 레코드를 삽입하는 가장 빠른 방법은 무엇입니까?
function load_data2db($sms_id){
$mysqli = new mysqli('localhost', 'root', 'cr3at1ve', 'tmp-clicknsend');
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// Create statement object
$stmt = $mysqli->stmt_init();
if ($stmt = $mysqli->prepare("INSERT INTO isec_test (sms_id, status,msgid,prmsgid,mob,sms_history_id) values (?, ?, ?, ?, ?, ?)")) {
/* Bind our params */
$stmt->bind_param('ssssss',$sms_id,$status,$msgid,$prmsgid,$mob,$sms_history_id);
for($i=0;$i<100000;$i++)
{
/* Set our params */
$sms_id = "110";
$status = "OK";
$msgid = "msgid";
$prmsgid = "100-0";
$mob = "306974386068";
$sms_history_id = 102;
/* Execute the prepared Statement */
$stmt->execute();
}
/* Close the statement */
$stmt->close();
}
else {
/* Error */
printf("Prepared Statement Error: %s\n", $mysqli->error);
}
}
load_data2db(10);
은 그 때 나는 옛날 방식 (루프와 하나 하나를 삽입)
include("mysql_connect.php");
for($i=0;$i<100000;$i++)
{
$query = "INSERT INTO isec_test(sms_id,status,msgid) values ('1','OK','123-123')";
$query = @mysql_query($query);
}
mysql_close($dbc);
내가 테스트를 많이 만들어 항상 간단한 MySQL의 방법은 1 초 빨랐다와 동일했다. 그래서 나는 당혹 스럽다. 내가 무엇을 할 수 있을지? LOAD DATA를 사용 하시겠습니까?
은 100,000 개의 쿼리에 대해 1 초입니다. 실제로 많은 문제가 있습니까? –
예. 나는 서버의 속도와 자원 (RAM)에 관심이있다. 이것은 100.000 * 50 명의 사용자에게 발생할 수 있습니다. 그래서 나는 mysqli가 왜 속도면에서 더 나은지 궁금해하고있다. (적어도 내가 읽었던 것) 나는 나의 테스트에서 그것을 볼 수 없다. –
나는 mysql을 잘 모른다. 첫 번째 코드는 대량 삽입 (mssql과 같이)입니까? – Jaxedin