Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mencapai Carian Seperti Teks Penuh pada Jadual InnoDB dalam MySQL?

Bagaimanakah Saya Boleh Mencapai Carian Seperti Teks Penuh pada Jadual InnoDB dalam MySQL?

Linda Hamilton
Lepaskan: 2024-12-17 13:52:09
asal
842 orang telah melayarinya

How Can I Achieve Fulltext-Like Search on InnoDB Tables in MySQL?

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));
Salin selepas log masuk

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');
Salin selepas log masuk

Faedah

Pendekatan ini menawarkan kelebihan berikut:

  • Keupayaan carian seperti teks penuh tanpa overhed Sphinx atau alatan luaran lain
  • Prestasi carian yang lebih pantas berbanding "LIKE" pertanyaan
  • Pelaksanaan dan penyelenggaraan yang dipermudahkan

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan