Maison > base de données > tutoriel mysql > Comment puis-je réaliser une recherche de type texte intégral sur les tables InnoDB dans MySQL ?

Comment puis-je réaliser une recherche de type texte intégral sur les tables InnoDB dans MySQL ?

Linda Hamilton
Libérer: 2024-12-17 13:52:09
original
841 Les gens l'ont consulté

How Can I Achieve Fulltext-Like Search on InnoDB Tables in MySQL?

Recherche de données MySQL avec des capacités de type texte intégral sur InnoDB

L'approche conventionnelle consistant à utiliser "LIKE" pour la recherche de chaînes sur une table InnoDB en souffre des limitations de performances et de la nécessité de vérifier chaque terme de recherche individuellement. Pour améliorer la fonctionnalité de recherche, une solution qui imite la recherche en texte intégral sur les tables InnoDB est souhaitable.

Solution : utiliser une table MyISAM distincte pour l'indexation

Cette approche implique la création d'une table MyISAM distincte pour l'indexation. Table MyISAM qui reflète la table InnoDB. La table MyISAM contient une colonne supplémentaire indexée avec le mot-clé "FULLTEXT". En remplissant cette table MyISAM avec des données de lignes, nous créons efficacement un index qui prend en charge des capacités de recherche rapides de type texte intégral.

Mise en œuvre

Considérons l'exemple suivant :

-- InnoDB tables
CREATE TABLE users (id INT, name VARCHAR(255), PRIMARY KEY (id));
CREATE TABLE forums (id INT, name VARCHAR(255), PRIMARY KEY (id));
CREATE TABLE threads (id INT, subject VARCHAR(255), user_id INT, forum_id INT, PRIMARY KEY (id));

-- MyISAM fulltext table
CREATE TABLE threads_ft (id INT, subject VARCHAR(255), FULLTEXT(subject), PRIMARY KEY (id));
Copier après la connexion

Synchronisation des données

Pour conserver le Table de texte intégral MyISAM à jour, vous pouvez utiliser des déclencheurs, des mises à jour par lots ou tout autre mécanisme approprié.

Effectuer des requêtes de recherche

Maintenant, vous pouvez effectuer des requêtes de type texte intégral requêtes de recherche :

-- Stored procedure for searching
CREATE PROCEDURE ft_search_threads(IN p_search VARCHAR(255))
BEGIN
  SELECT *
  FROM threads_ft
  WHERE MATCH(subject) AGAINST (p_search IN BOOLEAN MODE)
  ORDER BY RANK() DESC;
END;

-- Example query
CALL ft_search_threads('keyword1 keyword2 keyword3');
Copier après la connexion

Avantages

Ceci Cette approche offre les avantages suivants :

  • Capacités de recherche de type texte intégral sans la surcharge de Sphinx ou d'autres outils externes
  • Performances de recherche plus rapides par rapport aux requêtes "LIKE"
  • Mise en œuvre et maintenance simplifiées

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal