首頁 > 資料庫 > mysql教程 > 如何使用MyISAM索引實現InnoDB表的全文檢索?

如何使用MyISAM索引實現InnoDB表的全文檢索?

Susan Sarandon
發布: 2024-12-22 05:13:09
原創
228 人瀏覽過

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 表中實現類似全文的搜尋功能提供了一種可行的替代方案,利用了 InnoDB 和 MyISAM 的優勢引擎。

以上是如何使用MyISAM索引實現InnoDB表的全文檢索?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板