Rumah >pangkalan data >tutorial mysql >Bolehkah Jadual InnoDB Memanfaatkan Fungsi Carian Teks Penuh Tanpa Alat Luaran?
Bolehkah InnoDB Menggunakan Fungsi Seperti Carian Teks Penuh?
Pertanyaan mudah dengan berbilang pengendali LIKE boleh menjadi tidak cekap apabila mencari berbilang rentetan carian. Untuk membetulkannya pada jadual InnoDB tanpa menggunakan alat luaran seperti Sphinx, pertimbangkan untuk menggunakan jadual teks penuh MyISAM untuk mengindeks kembali ke dalam jadual InnoDB anda.
Skema Pangkalan Data
Buat anda pangkalan data menggunakan InnoDB sebagai enjin storan:
CREATE TABLE users (...) ENGINE=INNODB; CREATE TABLE forums (...) ENGINE=INNODB; CREATE TABLE threads ( forum_id SMALLINT UNSIGNED NOT NULL, thread_id INT UNSIGNED NOT NULL DEFAULT 0, user_id INT UNSIGNED NOT NULL, subject VARCHAR(255) NOT NULL, -- Desired search field created_date DATETIME NOT NULL, next_reply_id INT UNSIGNED NOT NULL DEFAULT 0, view_count INT UNSIGNED NOT NULL DEFAULT 0, PRIMARY KEY (forum_id, thread_id) -- Composite clustered PK index ) ENGINE=INNODB;
Seterusnya, cipta jadual carian teks penuh menggunakan MyISAM:
CREATE TABLE threads_ft ( forum_id SMALLINT UNSIGNED NOT NULL, thread_id INT UNSIGNED NOT NULL DEFAULT 0, subject VARCHAR(255) NOT NULL, FULLTEXT (subject), -- Fulltext index on subject PRIMARY KEY (forum_id, thread_id) -- Composite non-clustered index ) ENGINE=MYISAM;
Prosedur Tersimpan Carian
Akhir sekali, buat prosedur tersimpan untuk carian teks penuh anda:
DROP PROCEDURE IF EXISTS ft_search_threads; DELIMITER # CREATE PROCEDURE ft_search_threads ( IN p_search VARCHAR(255) ) BEGIN SELECT t.*, f.title AS forum_title, u.username, MATCH(tft.subject) AGAINST (p_search IN BOOLEAN MODE) AS rank FROM threads_ft tft INNER JOIN threads t ON tft.forum_id = t.forum_id AND tft.thread_id = t.thread_id INNER JOIN forums f ON t.forum_id = f.forum_id INNER JOIN users u ON t.user_id = u.user_id WHERE MATCH(tft.subject) AGAINST (p_search IN BOOLEAN MODE) ORDER BY rank DESC LIMIT 100; END; CALL ft_search_threads('+innodb +clustered +index');
Dengan pengubahsuaian ini, anda boleh melaksanakan dengan berkesan keupayaan carian seperti teks penuh pada jadual InnoDB anda tanpa menggunakan penyelesaian.
Atas ialah kandungan terperinci Bolehkah Jadual InnoDB Memanfaatkan Fungsi Carian Teks Penuh Tanpa Alat Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!