Mengeksploitasi Indeks dengan MySQL FIND_IN_SET atau Setara
Apabila menggunakan FIND_IN_SET dalam MySQL, adalah penting untuk mengenali batasannya dalam menggunakan indeks. Berbeza dengan id yang setara dalam binaan (a, b) mendedahkan bahawa FIND_IN_SET mempamerkan jenis "SEMUA" dan tidak mempunyai kunci yang ditentukan, menyebabkan prestasi tidak cekap apabila indeks tersedia.
Mengatasi Had
Walaupun tidak boleh menggunakan indeks FIND_IN_SET secara langsung, terdapat penyelesaian alternatif untuk menggunakan indeks dalam konteks yang serupa. Ini melibatkan mencipta pernyataan yang disediakan yang menerima rentetan yang dipisahkan koma sebagai parameter.
Contoh Penyata Disediakan
Pertimbangkan pernyataan yang disediakan berikut:
CREATE PROCEDURE get_data(IN comma_separated_ids TEXT) BEGIN SELECT * FROM Foo WHERE id IN (comma_separated_ids); END;
Pernyataan yang disediakan ini boleh dipanggil dengan rentetan ID yang dipisahkan koma sebagai hujah. MySQL akan mengendalikan penukaran secara automatik dan melakukan pertanyaan yang dioptimumkan menggunakan indeks (jika tersedia).
Penjelasan Pengoptimuman
Binaan id IN (a, b, c) diiktiraf oleh pengoptimum MySQL sebagai syarat kesamaan pada lajur kunci utama (id). Memandangkan lajur id diindeks, pengoptimum boleh menggunakan indeks untuk mendapatkan semula baris yang sepadan dengan cekap, menghasilkan jenis "julat" yang diingini dan penggunaan kunci yang cekap.
Mencegah Serangan Suntikan SQL
Adalah penting untuk ambil perhatian bahawa menghantar data yang dibekalkan pengguna melalui pernyataan yang disediakan ialah amalan yang disyorkan untuk mencegah serangan suntikan SQL. Pangkalan data boleh mengendalikan penukaran rentetan dengan selamat dan menghalang input berniat jahat daripada menjejaskan pelaksanaan pertanyaan.
Kesimpulan
Walaupun FIND_IN_SET tidak sesuai langsung untuk menggunakan indeks, penyelesaian yang disediakan membolehkan anda mencapai fungsi yang sama sambil memanfaatkan indeks untuk prestasi optimum. Dengan mengikuti langkah-langkah yang diterangkan, anda boleh membuat pernyataan yang disediakan yang menggunakan indeks dengan berkesan, meningkatkan kelajuan pertanyaan dan mengekalkan integriti data.
Atas ialah kandungan terperinci Bolehkah Anda Menggunakan Indeks dengan MySQL FIND_IN_SET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!