Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Melaksanakan Carian Teks Penuh pada Jadual InnoDB Menggunakan MyISAM untuk Pengindeksan?
Carian Seperti Teks Penuh di InnoDB: Pendekatan Alternatif
Walaupun carian teks penuh disokong secara asli dalam jadual MyISAM, pengguna InnoDB mungkin menghadapi had apabila cuba melaksanakan fungsi yang serupa. Untuk menangani cabaran ini, penyelesaian menarik muncul yang melibatkan penggunaan jadual teks penuh MyISAM untuk mengindeks kembali ke dalam pangkalan data InnoDB.
Mencipta Jadual InnoDB
Langkah awal melibatkan penubuhan jadual InnoDB yang diperlukan. Jadual ini akan berfungsi sebagai repositori data teras. Sebagai contoh, pertimbangkan skema berikut:
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, 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) ) ENGINE=InnoDB;
Menubuhkan Jadual Teks Penuh
Seterusnya, buat jadual MyISAM khusus untuk pengindeksan teks penuh. Jadual ini akan memudahkan pengindeksan medan jadual InnoDB yang ditentukan.
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), PRIMARY KEY (forum_id, thread_id) ) ENGINE=MyISAM;
Mengekalkan Data Jadual
Untuk memastikan penyegerakan antara jadual InnoDB dan MyISAM, laksanakan kaedah untuk mengemas kini jadual teks penuh. Ini boleh dicapai melalui pencetus atau proses kelompok setiap malam.
Prosedur Tersimpan untuk Carian
Untuk memudahkan fungsi carian seperti teks penuh, buat prosedur tersimpan dalam MySQL . Prosedur ini akan menanyakan jadual MyISAM, menapis keputusan berdasarkan istilah carian yang disediakan dan mengembalikan padanan yang paling berkaitan.
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;
Dengan memanggil prosedur tersimpan ini dan menyediakan istilah carian, pengguna boleh mendapatkan semula hasil yang berkaitan. daripada jadual InnoDB.
Pendekatan ini memberikan alternatif yang berdaya maju untuk melaksanakan fungsi carian seperti teks penuh dalam jadual InnoDB, memanfaatkan kekuatan kedua-dua enjin InnoDB dan MyISAM.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Carian Teks Penuh pada Jadual InnoDB Menggunakan MyISAM untuk Pengindeksan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!