Kecekapan penggantian ke dalam mysql sangat lemah. Berbilang proses akan mengunci jadual apabila dijalankan serentak, jadi pendua harus digunakan untuk kemas kini terkenal. Saya tidak menjangka bahawa walaupun saya menggunakan operasi abaikan sisipan, saya mungkin menghadapi masalah prestasi saya ingin merekodkan masalah yang saya hadapi ini.
Untuk memasukkan data permulaan ke dalam jadual, saya membuka 10 proses untuk memasukkan data secara serentak ke dalam pangkalan data menggunakan insert ignore Setiap pernyataan abaikan sisipan mengandungi 7 baris data. Tanpa diduga, selepas masuk dalam talian dan mula menjalankan skrip, banyak jadual kunci muncul dalam pangkalan data. Berdasarkan log status innodb, perkara yang dikunci ialah kunci utama ID penambahan automatik jadual.
Selepas menyahpepijat untuk masa yang lama, saya mendapati bahawa apabila memasukkan abaikan, kunci S akan diambil untuk setiap baris data yang dimasukkan untuk mengesan id unik, dan pada masa yang sama, kunci niat (insert intension) akan ditambahkan pada medan id yang ditambah secara automatik bagi kunci utama ), apabila kunci unik adalah lebih kompleks, kunci niat sisipan kunci utama akan sentiasa diduduki apabila mengesan kunci unik, dan sisipan lain juga mahu menambah. kunci niat sisipan pada id kunci utama, mengakibatkan kebuntuan.
Situasi di atas ditemui dalam mysql 8.x Nampaknya saya tidak menghadapi masalah berkaitan dengan versi mysql yang lebih rendah sebelum ini, jadi saya tidak tahu sama ada terdapat perangkap dalam sisipan abaikan versi yang lebih rendah. mysql, tetapi dalam 8.x Versi terbaik ialah masukkan abaikan Jangan masukkan berbilang baris data, terutamanya apabila kunci unik adalah lebih kompleks (terdiri daripada tiga atau empat medan)
Apabila anda menggunakan pernyataan INSERT ini untuk menambah berbilang baris pada jadual, jika ralat berlaku semasa pemprosesan, MySQL menamatkan pernyataan dan mengembalikan ralat. Akibatnya, tiada baris dimasukkan ke dalam jadual.
Walau bagaimanapun, jika anda menggunakan pernyataan abaikan sisipan, baris yang mengandungi data tidak sah yang menyebabkan ralat akan diabaikan dan baris dengan data yang sah akan dimasukkan ke dalam jadual.
rreeeeAtas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah prestasi insert ignore dalam mysql8.x. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!