Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine Volltextsuche in InnoDB-Tabellen mithilfe von MyISAM zur Indizierung implementieren?

Wie kann ich eine Volltextsuche in InnoDB-Tabellen mithilfe von MyISAM zur Indizierung implementieren?

Susan Sarandon
Susan SarandonOriginal
2024-12-22 05:13:09239Durchsuche

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

Volltextähnliche Suche auf InnoDB: Ein alternativer Ansatz

Während die Volltextsuche in MyISAM-Tabellen nativ unterstützt wird, kann es bei InnoDB-Benutzern zu Problemen kommen Einschränkungen beim Versuch, ähnliche Funktionen zu implementieren. Um dieser Herausforderung zu begegnen, entsteht eine faszinierende Lösung, die die Verwendung einer MyISAM-Volltexttabelle zur Rückindizierung in eine InnoDB-Datenbank umfasst.

Erstellen von InnoDB-Tabellen

Der erste Schritt beinhaltet die Einrichtung der notwendigen InnoDB-Tabellen. Diese Tabellen dienen als zentrale Datenspeicher. Betrachten Sie beispielsweise das folgende Schema:

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;

Erstellen einer Volltexttabelle

Als nächstes erstellen Sie eine MyISAM-Tabelle für die Volltextindizierung. Diese Tabelle erleichtert die Indizierung bestimmter InnoDB-Tabellenfelder.

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;

Pflege von Tabellendaten

Um die Synchronisierung zwischen den InnoDB- und MyISAM-Tabellen sicherzustellen, implementieren Sie Methoden zur Aktualisierung die Volltexttabelle. Dies kann durch Trigger oder nächtliche Batchprozesse erreicht werden.

Gespeicherte Prozedur für die Suche

Um die Volltext-ähnliche Suchfunktion zu ermöglichen, erstellen Sie eine gespeicherte Prozedur in MySQL . Diese Prozedur fragt die MyISAM-Tabelle ab, filtert die Ergebnisse basierend auf dem angegebenen Suchbegriff und gibt die relevantesten Übereinstimmungen zurück.

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;

Durch Aufrufen dieser gespeicherten Prozedur und Angabe eines Suchbegriffs können Benutzer relevante Ergebnisse abrufen aus den InnoDB-Tabellen.

Dieser Ansatz stellt eine praktikable Alternative für die Implementierung volltextähnlicher Suchfunktionen in InnoDB-Tabellen dar und nutzt die Stärken von InnoDB und MyISAM Motoren.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Volltextsuche in InnoDB-Tabellen mithilfe von MyISAM zur Indizierung implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn