Rumah  >  Artikel  >  pangkalan data  >  Kaedah Manakah yang Lebih Cekap untuk Memasukkan Berbilang Baris ke dalam Jadual MySQL dengan PDO: Sisipan Berulang atau Sisipan Batch?

Kaedah Manakah yang Lebih Cekap untuk Memasukkan Berbilang Baris ke dalam Jadual MySQL dengan PDO: Sisipan Berulang atau Sisipan Batch?

Barbara Streisand
Barbara Streisandasal
2024-11-11 12:07:03685semak imbas

Which Method is More Efficient for Inserting Multiple Rows into a MySQL Table with PDO: Iterative Insert or Batch Insert?

Memasukkan Berbilang Baris dengan PDO MySQL: Prestasi dan Kecekapan

Apabila memasukkan berbilang baris ke dalam jadual MySQL menggunakan PDO, terdapat beberapa pendekatan untuk pertimbangkan. Soalan ini meneroka kecekapan relatif dan keselamatan dua kaedah biasa:

Kaedah 1: Sisipan Berulang Menggunakan foreach

$stmt = $db->prepare($sql);

foreach ($rows as $row) {
  $stmt->execute($row);
}

Kaedah 2: Sisipan Batch menggunakan Penggabungjalinan

$sql = "insert into `table_name` (col1, col2, col3) values ";
$sql .= //not sure the best way to concatenate all the values, use implode?
$stmt = $db->prepare($sql)->execute();

Prestasi Pertimbangan

Sisipan kelompok (Kaedah 2) secara amnya lebih pantas daripada sisipan berulang (Kaedah 1) kerana ia mengurangkan bilangan pertanyaan yang dihantar ke pangkalan data. Walau bagaimanapun, dalam kebanyakan senario praktikal, perbezaan prestasi adalah diabaikan.

Keselamatan dan Kebolehpercayaan

Kedua-dua kaedah adalah selamat dan boleh dipercayai apabila digunakan dengan betul. Untuk mengelakkan kelemahan suntikan SQL, adalah penting untuk menggunakan pernyataan yang disediakan dan pertanyaan berparameter.

Pendekatan Terbaik

Pendekatan terbaik bergantung pada keperluan khusus aplikasi anda:

  • Kaedah 1 (Sisipan Berulang) lebih mudah untuk dilaksanakan dan sesuai untuk set data bersaiz kecil atau sederhana.
  • Kaedah 2 (Sisipan Batch) lebih cekap untuk set data yang besar, tetapi ia memerlukan kod yang lebih kompleks.

Pertimbangkan kod folgenden sebagai versi Kaedah 2 yang diubah suai, menggunakan implode() untuk penyatuan nilai dan parameterisasi untuk dipertingkatkan keselamatan:

$sql = "insert into `table_name` (col1, col2, col3) values ";

$paramArray = array();
$sqlArray = array();

foreach ($rows as $row) {
    $sqlArray[] = '(' . implode(',', array_fill(0, count($row), '?')) . ')';
    foreach ($row as $element) {
        $paramArray[] = $element;
    }
}

$sql .= implode(',', $sqlArray);

$stmt = $db->prepare($sql);
$stmt->execute($paramArray);

Atas ialah kandungan terperinci Kaedah Manakah yang Lebih Cekap untuk Memasukkan Berbilang Baris ke dalam Jadual MySQL dengan PDO: Sisipan Berulang atau Sisipan Batch?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn