Bolehkah MySQL FIND_IN_SET Menggunakan Indeks?
Dalam bidang pengoptimuman pangkalan data, indeks memainkan peranan penting dalam meningkatkan prestasi pertanyaan. Walau bagaimanapun, FIND_IN_SET, fungsi yang biasa digunakan untuk mencari nilai dalam rentetan yang dipisahkan koma, telah diketahui memintas penggunaan indeks, menghasilkan prestasi yang lebih perlahan.
Mencapai Pertanyaan Berindeks dengan Parameter Rentetan
Walaupun terdapat pengehadan yang dirasakan, adalah mungkin untuk mencapai pertanyaan diindeks walaupun semasa berurusan dengan rentetan yang dipisahkan koma. Dengan menggunakan pernyataan yang disediakan yang menerima rentetan sebagai parameter, kami boleh menggunakan indeks secara dinamik untuk meningkatkan kecekapan pertanyaan.
Mencipta Penyata Disediakan
CREATE PROCEDURE my_procedure(IN csv_str VARCHAR(255)) BEGIN SET @csv_list = CONCAT('(', csv_str, ')'); SELECT * FROM users WHERE id IN @csv_list; END
Dalam prosedur tersimpan ini, parameter input csv_str berfungsi sebagai sumber untuk rentetan yang dipisahkan koma. Kami membina klausa IN secara dinamik menggunakan penggabungan dan menetapkannya kepada pembolehubah sesi @csv_list.
Melaksanakan Pernyataan Disediakan
Untuk melaksanakan pernyataan yang disediakan dengan koma- rentetan yang dipisahkan, anda akan menggunakan sintaks berikut:
CALL my_procedure('1,2,3');
Mengoptimumkan Pertanyaan
Pernyataan yang disediakan, setelah dilaksanakan, mencetuskan pengoptimum untuk menganalisis pertanyaan dan menggunakan indeks pada lajur id. Penggunaan indeks ini jelas dalam output EXPLAIN, memastikan pelaksanaan pertanyaan yang cekap.
Kesimpulan
Walaupun FIND_IN_SET sahaja tidak semestinya menggunakan indeks, menggunakan pernyataan yang disediakan dengan rentetan parameter membolehkan kami mencapai pertanyaan terindeks. Teknik ini memintas kelemahan prestasi yang dikaitkan dengan FIND_IN_SET dan menyediakan masa pelaksanaan pertanyaan yang optimum.
Atas ialah kandungan terperinci Bolehkah MySQL FIND_IN_SET Memanfaatkan Indeks dengan Penyata Disediakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!