ホームページ >データベース >mysql チュートリアル >MySQL の InnoDB テーブルでフルテキストのような検索を実現するにはどうすればよいですか?
InnoDB 上のフルテキストのような機能を使用した MySQL データの検索
InnoDB テーブルの文字列検索に "LIKE" を使用する従来のアプローチには問題があります。パフォーマンスの制限と、各検索語を個別に確認する必要があるためです。検索機能を強化するには、InnoDB テーブルでの全文検索を模倣するソリューションが望ましいです。
解決策: インデックス作成に別個の MyISAM テーブルを利用する
このアプローチには、別個の MyISAM テーブルを作成することが含まれます。 InnoDB テーブルをミラーリングする MyISAM テーブル。 MyISAM テーブルには、「FULLTEXT」キーワードでインデックス付けされた追加の列が含まれています。この MyISAM テーブルに行データを設定することで、フルテキストのような高速な検索機能をサポートするインデックスを効率的に作成できます。
実装
次の例を考えてみましょう。
-- 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));
同期中データ
MyISAM フルテキスト テーブルを最新の状態に保つには、トリガー、バッチ更新、またはその他の適切なメカニズムを使用できます。
検索クエリの実行
全文のような検索を実行できるようになりましたクエリ:
-- 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');
利点
このアプローチには次の利点があります:
以上がMySQL の InnoDB テーブルでフルテキストのような検索を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。