MySQL (seperti kebanyakan DBMS) akan menyimpan rencana eksekusi untuk pernyataan yang disiapkan, jadi jika pengguna A membuat rencana untuk:
SELECT * FROM some_table WHERE a_col=:v1 AND b_col=:v2
(dimana v1 dan v2 adalah bind vars) kemudian mengirimkan nilai untuk diinterpolasi oleh DBMS, kemudian pengguna B mengirimkan kueri yang sama (tetapi dengan nilai yang berbeda untuk interpolasi) DBMS tidak harus membuat ulang rencana. yaitu DBMS yang menemukan rencana yang cocok - bukan PDO.
Namun ini berarti bahwa setiap operasi pada database memerlukan setidaknya 2 perjalanan pulang pergi (pertama untuk menyajikan kueri, yang kedua untuk menyajikan vars pengikat) sebagai lawan dari perjalanan pulang pergi tunggal untuk kueri dengan nilai literal, maka ini menimbulkan biaya jaringan tambahan . Ada juga biaya kecil yang terlibat dalam dereferensi (dan pemeliharaan) cache kueri/rencana.
Pertanyaan kuncinya adalah apakah biaya ini lebih besar daripada biaya pembuatan rencana sejak awal.
Sementara (dalam pengalaman saya) tampaknya ada manfaat kinerja menggunakan pernyataan yang disiapkan dengan Oracle, saya tidak yakin bahwa hal yang sama berlaku untuk MySQL - namun, banyak yang akan bergantung pada struktur database Anda dan kompleksitas kueri (atau lebih khusus lagi, berapa banyak opsi berbeda yang dapat ditemukan pengoptimal untuk menyelesaikan kueri).
Coba ukur sendiri (petunjuk:Anda mungkin ingin menyetel ambang kueri lambat ke 0 dan menulis beberapa kode untuk mengubah nilai literal kembali menjadi representasi anonim untuk kueri yang ditulis ke log).