Mencari Data MySQL dengan Keupayaan Seperti Teks Penuh pada InnoDB
Pendekatan konvensional menggunakan "LIKE" untuk carian rentetan pada jadual InnoDB mengalami masalah daripada had prestasi dan keperluan untuk menyemak setiap istilah carian secara individu. Untuk meningkatkan kefungsian carian, penyelesaian yang meniru carian teks penuh pada jadual InnoDB adalah wajar.
Penyelesaian: Menggunakan Jadual MyISAM Berasingan untuk Pengindeksan
Pendekatan ini melibatkan penciptaan berasingan Jadual MyISAM yang mencerminkan jadual InnoDB. Jadual MyISAM mengandungi lajur tambahan yang diindeks dengan kata kunci "FULLTEXT". Dengan mengisi jadual MyISAM ini dengan data baris, kami mencipta indeks dengan berkesan yang menyokong keupayaan carian seperti teks penuh yang pantas.
Pelaksanaan
Pertimbangkan contoh berikut:
-- InnoDB tables CREATE TABLE users (id INT, name VARCHAR(255), PRIMARY KEY (id)); CREATE TABLE forums (id INT, name VARCHAR(255), PRIMARY KEY (id)); CREATE TABLE threads (id INT, subject VARCHAR(255), user_id INT, forum_id INT, PRIMARY KEY (id)); -- MyISAM fulltext table CREATE TABLE threads_ft (id INT, subject VARCHAR(255), FULLTEXT(subject), PRIMARY KEY (id));
Menyegerakkan Data
Untuk memastikan jadual teks penuh MyISAM dikemas kini, anda boleh menggunakan pencetus, kemas kini kelompok atau mana-mana mekanisme lain yang sesuai.
Melaksanakan Pertanyaan Carian
Kini, anda boleh melakukan carian seperti teks penuh pertanyaan:
-- Stored procedure for searching CREATE PROCEDURE ft_search_threads(IN p_search VARCHAR(255)) BEGIN SELECT * FROM threads_ft WHERE MATCH(subject) AGAINST (p_search IN BOOLEAN MODE) ORDER BY RANK() DESC; END; -- Example query CALL ft_search_threads('keyword1 keyword2 keyword3');
Faedah
Pendekatan ini menawarkan kelebihan berikut:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Carian Seperti Teks Penuh pada Jadual InnoDB dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!