ホームページ > データベース > mysql チュートリアル > InnoDB テーブルは外部ツールなしで全文検索機能を利用できますか?

InnoDB テーブルは外部ツールなしで全文検索機能を利用できますか?

Susan Sarandon
リリース: 2024-12-17 18:40:12
オリジナル
171 人が閲覧しました

Can InnoDB Tables Leverage Full-Text Search Functionality Without External Tools?

InnoDB は全文検索のような機能を利用できますか?

複数の検索文字列を検索する場合、複数の LIKE 演算子を使用した単純なクエリは非効率になる可能性があります。 Sphinx などの外部ツールを利用せずに InnoDB テーブルでこの問題を解決するには、MyISAM フルテキスト テーブルを採用して 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, -- Desired search field
    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) -- Composite clustered PK index
) ENGINE=INNODB;
ログイン後にコピー

次に、 MyISAM を使用した全文検索テーブル:

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), -- Fulltext index on subject
    PRIMARY KEY (forum_id, thread_id) -- Composite non-clustered index
) ENGINE=MYISAM;
ログイン後にコピー

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

最後に、全文検索用のストアド プロシージャを作成します:

DROP PROCEDURE IF EXISTS ft_search_threads;
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;

CALL ft_search_threads('+innodb +clustered +index');
ログイン後にコピー

これらの変更により、外部ツールに頼ることなく、InnoDB テーブルにフルテキストのような検索機能を効果的に実装できます。解決策。

以上がInnoDB テーブルは外部ツールなしで全文検索機能を利用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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