ホームページ > データベース > mysql チュートリアル > インデックス作成に MyISAM を使用して InnoDB テーブルに全文検索を実装するにはどうすればよいですか?

インデックス作成に MyISAM を使用して InnoDB テーブルに全文検索を実装するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-22 05:13:09
オリジナル
223 人が閲覧しました

How Can I Implement Full-Text Search on InnoDB Tables Using MyISAM for Indexing?

InnoDB での全文検索: 代替アプローチ

全文検索は MyISAM テーブルでネイティブにサポートされていますが、InnoDB ユーザーは次のような問題に直面する可能性があります。同様の機能を実装しようとする場合の制限。この課題に対処するために、MyISAM フルテキスト テーブルを利用して InnoDB データベースにインデックスを作成するという興味深いソリューションが登場しました。

InnoDB テーブルの作成

最初のステップこれには、必要な InnoDB テーブルの確立が含まれます。これらのテーブルは、コア データ リポジトリとして機能します。たとえば、次のスキーマを考えてみましょう。

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;
ログイン後にコピー

フルテキスト テーブルの確立

次に、フルテキスト インデックス作成専用の MyISAM テーブルを作成します。このテーブルは、指定された InnoDB テーブル フィールドのインデックス付けを容易にします。

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;
ログイン後にコピー

テーブル データの保守

InnoDB テーブルと MyISAM テーブル間の同期を確保するには、更新メソッドを実装します。全文テーブル。これは、トリガーまたは夜間のバッチ プロセスを通じて実現できます。

検索用のストアド プロシージャ

全文のような検索機能を容易にするには、MySQL 内にストアド プロシージャを作成します。 。このプロシージャは、MyISAM テーブルをクエリし、指定された検索語に基づいて結果をフィルタリングし、最も関連性の高い一致を返します。

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;
ログイン後にコピー

このストアド プロシージャを呼び出して検索語を指定すると、ユーザーは関連する結果を取得できます。

このアプローチは、InnoDB テーブル内にフルテキストのような検索機能を実装するための実行可能な代替手段を提供し、InnoDB と MyISAM の両方の長所を活用します。エンジン。

以上がインデックス作成に MyISAM を使用して InnoDB テーブルに全文検索を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート