Saya menduga kelambatan dalam mengambil baris, jumlah baris yang dikembalikan, daripada 5000+ pengikat tempat penampung dalam pernyataan itu. pId IN ( ? , ? , ... , ? )
Saran saya adalah menguji hanya mengembalikan satu baris, memberikan satu nilai yang diketahui ada/mengembalikan baris, dan kemudian 4999+ nilai yang diketahui tidak ada/tidak mengembalikan satu baris.
Misalnya, jika kita mengetahui nilai pId tertinggi dalam tabel, gunakan nilai yang lebih tinggi dari itu, berikan nilai bind untuk pernyataan seperti ini
... pId IN ( ? , ? , ? , ... , ? )
jadi hasilnya akan setara dengan menjalankan
... pId IN ( 99999999 , 99999998 , 99999997 , ... , 42 )
yang akan menjadi hasil yang sama dengan yang kita jalankan
... pId IN ( 42 )
Harapan kami adalah mengembalikan hanya satu baris ( pId =42 ).
Kemudian bandingkan waktunya ( 5000+ nilai ikatan yang mengembalikan 1 baris ) dengan dua nilai ikatan yang mengembalikan satu baris
... pId IN ( 99999999 , 42 )
Dan lihat apakah ada perbedaan performa yang signifikan.
(Ada lebih banyak pekerjaan yang harus dilakukan dengan 5000+ nilai pengikatan, tetapi saya tidak mengharapkan besar perbedaan, tetapi harus diuji.
Memikirkannya sedikit, mungkin lebih mudah untuk menyiapkan pengujian menggunakan semua nilai pengikatan yang ada, dan cukup menambahkan LIMIT 2
ke akhir kueri. (Saya tidak yakin apakah MySQL memiliki beberapa peningkatan kinerja untuk LIMIT 2
.
Mungkin lebih baik menambahkan kondisi seperti AND pId * 10 = 420
Tujuannya adalah untuk menyediakan banyak nilai pengikatan tetapi hanya mengembalikan satu atau dua baris.
Tes lain adalah mengembalikan seluruh baris, tetapi hanya menggunakan beberapa nilai pengikatan. Mungkin kondisi rentang yang mengembalikan 5000+ baris.
Pertanyaannya bisa berupa:
... pId >= ? AND pId <= ?
dengan rentang yang cukup besar antara nilai yang diberikan yang kita dapatkan di sekitar 5.000 baris.
Dan bandingkan kinerjanya.
Prediksi saya (tebak?) adalah bahwa kinerja akan lebih berkorelasi dengan jumlah baris yang dikembalikan, daripada jumlah nilai pengikatan.
Saya tidak yakin apakah ini jawaban untuk pertanyaan Anda, tetapi ini adalah pendekatan yang akan saya ambil untuk menjawab pertanyaan ... "apa yang menyebabkan ini menjadi lambat, jumlah nilai pengikatan, atau jumlah baris yang dikembalikan? "