Bolehkah MySQL FIND_IN_SET atau Setara Menggunakan Indeks?
Pertanyaan SELECT * FROM Foo WHERE FIND_IN_SET(id, '2,3') tidak mengambil kesempatan daripada indeks kunci utama. Ini terbukti apabila membandingkan output EXPLAINnya dengan output untuk SELECT * FROM Foo WHERE id IN (2,3) yang menggunakan indeks.
Objektif: Membina prosedur tersimpan yang berkelakuan seperti pertanyaan kedua, menggunakan indeks tanpa pengetahuan sebelumnya tentang rentetan dipisahkan koma yang mengandungi ID.
Penyelesaian:
Buat pernyataan yang disediakan yang menerima rentetan sebagai parameter:
CREATE PROCEDURE my_sp(@id_string NCHAR(1000))
Pernyataan yang disediakan kemudiannya boleh dilaksanakan dengan rentetan dipisahkan koma sebagai hujah:
EXEC my_sp '2,3'
Pendekatan ini mencapai syarat yang diingini berikut:
Syarat ini menunjukkan bahawa indeks sedang digunakan.
Pertimbangan Keselamatan:
Penyata yang disediakan mengurangkan risiko serangan suntikan SQL. Walau bagaimanapun, adalah penting untuk memastikan data yang dibekalkan pengguna dibersihkan untuk mengelakkan serangan suntikan SQL peringkat ke-2.
Atas ialah kandungan terperinci Bolehkah FIND_IN_SET MySQL atau Fungsi Setara Menggunakan Indeks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!