Heim >Datenbank >MySQL-Tutorial >Können InnoDB-Tabellen die Volltextsuchfunktion ohne externe Tools nutzen?
Kann InnoDB eine Volltextsuche-ähnliche Funktionalität nutzen?
Eine einfache Abfrage mit mehreren LIKE-Operatoren kann bei der Suche nach mehreren Suchbegriffen ineffizient werden. Um dies auf einer InnoDB-Tabelle zu beheben, ohne externe Tools wie Sphinx zu verwenden, sollten Sie erwägen, eine MyISAM-Volltexttabelle zu übernehmen, um sie wieder in Ihre InnoDB-Tabellen zu indizieren.
Datenbankschema
Erstellen Sie Ihr Datenbank mit InnoDB als Speicher-Engine:
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;
Als nächstes erstellen Sie die Volltextsuchtabelle mit 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;
Gespeicherte Prozedur durchsuchen
Schließlich erstellen Sie eine gespeicherte Prozedur für Ihre Volltextsuche:
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');
Mit diesen Änderungen, Sie können volltextähnliche Suchfunktionen effektiv in Ihren InnoDB-Tabellen implementieren, ohne auf externe Lösungen zurückgreifen zu müssen.
Das obige ist der detaillierte Inhalt vonKönnen InnoDB-Tabellen die Volltextsuchfunktion ohne externe Tools nutzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!