ホームページ >データベース >mysql チュートリアル >MySQL の InnoDB テーブルでフルテキストのような検索を実現するにはどうすればよいですか?

MySQL の InnoDB テーブルでフルテキストのような検索を実現するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-17 13:52:09845ブラウズ

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

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');

利点

このアプローチには次の利点があります:

  • Sphinx のオーバーヘッドのないフルテキストのような検索機能または他の外部ツール
  • 「LIKE」と比較して高速な検索パフォーマンスクエリ
  • 実装とメンテナンスの簡素化

以上がMySQL の InnoDB テーブルでフルテキストのような検索を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。