foreach INSERT를 Mysql DB에 삽입하는 것은 매우 느립니다. 특히 10 만 개 이상의 레코드를 삽입 할 때

녀석

이 코드를 어떻게 더 빠르게 만들 수 있습니까? 내 데이터베이스에 100 개의 레코드를 삽입해도 괜찮지 만 500K 레코드를 삽입하면 시간이 정말 오래 걸립니다. 내 코드에서 implode를 사용하려고했지만 작동하지 않습니다. 코드에는 두 개의 foreach 루프가있는 것 같습니다. 하나는 다른 내부에 있지만 작동하는 방법을 찾을 수 없습니다. 누구든지 아이디어가 있습니까? 내 프레임 워크는 codeigniter입니다.

코드는 다음과 같습니다.

<?php  
 function Add_multiple_users($values)
{
    $err = '';
    foreach($values as $rows)
    {
        $clientQuery = 'INSERT INTO
                            client
                            (
                                admin_id,
                                create_time
                            )
                            VALUES
                            (
                                "'.$this -> session -> userdata('user_id').'",
                                "'.date('Y-m-d H:i:s').'"
                            )';
        $clientResult = @$this -> db -> query($clientQuery);
        if($clientResult)
        {
            $client_id = $this -> db -> insert_id();
            foreach($rows as $row)
            {
                $attrQuery = 'INSERT INTO
                                    client_attribute_value
                                    (
                                        attribute_id,
                                        client_id,
                                        value
                                    )
                                    VALUES
                                    (
                                        "'.$row['attribute_id'].'",
                                        "'.$client_id.'",
                                        "'.addslashes(trim($row['value'])).'"
                                    )';
                $attrResult = @$this -> db -> query($attrQuery);
                if(!$attrResult)
                {
                    $err .= '<p class="box error">Could not add attribute for<br>
                            Attribute ID: '.$row['attribute_id'].'<br>
                            Client ID: '.$client_id.'<br>
                            Attribute Value: '.trim($row['value']).'</p>';
                }
            }
        }
    }
    return $err;
}
?>

내가 시도한 것은 다음과 같습니다.

                $attrQuery = "INSERT INTO client_attribute_value (attribute_id, client_id, value) VALUES ";

                $vls = array();
                foreach($rows as $row) {
                    $myattribute_id = $row['attribute_id'];
                    $myclient_id = $row[$client_id];
                    $myvalue = addslashes(trim($row['value']));
                    $vls[] = " ( '$myattribute_id ', '$myclient_id ', '$myvalue ')";


                  $attrQuery .= implode(', ', $vls);

                  $attrResult = @$this -> db -> query($attrQuery);

클라이언트 테이블 샘플 : 클라이언트 테이블 샘플

client_attribute_value 테이블 샘플 : client_attribute_value

녀석

내 자신의 질문에 대답하면 이것이 앞으로 다른 사람에게 도움이되기를 바랍니다.

codeigniter / framework의 모델 .php 파일에 다음을 추가하십시오.

$this->db->trans_start();

   MY CODE

$this->db->trans_complete();

문제 해결됨. :) 그것은 대략 데이터베이스에 대한 내 INSERTS 레코드의 속도를 높입니다. 30 초에 15K 기록.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관