Mengoptimumkan Pertanyaan LIKE Berbilang Lajur untuk Prestasi MySQL
Dalam MySQL, pertanyaan LIKE yang kerap boleh menghalang prestasi. Pertimbangkan pertanyaan: PILIH x, y, z DARI jadual DI MANA x SUKA '%text%' ATAU y SUKA '%text%' ATAU z SUKA '%text%'. Bagaimanakah kita boleh mempercepatkan pertanyaan sedemikian tanpa memerlukan penggunaan cakera yang ketara atau penalti prestasi semasa manipulasi data?
Had Indeks
Pendekatan pengindeksan tradisional terbukti tidak berkesan untuk pertanyaan LIKE dengan kad bebas di permulaan istilah carian. Indeks memudahkan akses pantas kepada data dengan mengindeks aksara tertentu dari sebelah kiri medan. Dalam kes SUKA '%text%', bilangan pembolehubah aksara yang mendahului "teks" menghalang penggunaan indeks.
Carian Teks Penuh (FTS)
Sebaliknya bergantung pada indeks, MySQL menawarkan FTS untuk jadual MyISAM. FTS memperkemas carian teks dengan mengindeks perkataan dalam lajur. Kaedah ini sangat cekap untuk pertanyaan LIKE dengan kad bebas di kedua-dua hujungnya.
Jadual Bukan MyISAM
Untuk jadual yang menggunakan enjin storan bukan MyISAM, sistem pengindeksan tersuai boleh dilaksanakan. Ini melibatkan mencipta jadual indeks yang berasingan di mana perkataan dikaitkan dengan ID jadual yang sepadan.
MySQL 5.6
Bermula dengan MySQL 5.6, FTS tersedia untuk jadual InnoDB. Ini menawarkan alternatif yang sesuai untuk pengguna yang memerlukan kelebihan InnoDB.
Akibat
Walaupun FTS meningkatkan prestasi pertanyaan LIKE dengan ketara, ia datang dengan potensi kelemahan:
Sebelum melaksanakan FTS, pertimbangkan pertukaran antara kelajuan carian dan prestasi penggunaan cakera/manipulasi data. Untuk aplikasi yang memerlukan pertanyaan LIKE pantas, FTS ialah teknik pengoptimuman yang berharga.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan SEPERTI Berbilang Lajur dalam MySQL untuk Prestasi yang Lebih Baik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!