Maison > base de données > tutoriel mysql > Comment puis-je effectuer une recherche efficace en texte intégral sur les tables InnoDB à l'aide de MyISAM et de procédures stockées ?

Comment puis-je effectuer une recherche efficace en texte intégral sur les tables InnoDB à l'aide de MyISAM et de procédures stockées ?

Linda Hamilton
Libérer: 2024-12-16 12:14:15
original
767 Les gens l'ont consulté

How Can I Perform Efficient Full-Text Search on InnoDB Tables Using MyISAM and Stored Procedures?

Recherche en texte intégral sur InnoDB à l'aide de MyISAM et de procédures stockées

Trouver un moyen rapide et efficace d'effectuer des recherches en texte intégral sur une table InnoDB peut être un défi. Bien que des outils comme Sphinx fournissent une solution, cet article explore une approche MySQL pure utilisant MyISAM et des procédures stockées.

Le défi

Une requête simple qui recherche plusieurs chaînes dans une ligne utilisant des instructions LIKE peut être problématique en raison de ses performances lentes et de ses limitations.

SELECT ... WHERE row LIKE '%some%' OR row LIKE '%search%' OR  row LIKE '%string%'
Copier après la connexion

Le Solution

La solution proposée consiste à créer une table de texte intégral MyISAM qui s'indexe dans les tables InnoDB. Cela permet d'indexer une colonne spécifique (par exemple, un sujet) qui nécessite une recherche.

Structure de la base de données

Les tables InnoDB sont définies pour les données principales, telles que les utilisateurs et threads.

create table users (...) engine=innodb;

create table forums (...) engine=innodb;

create table threads (
...
subject varchar(255) not null, -- column we want to search
...
)
engine=innodb;
Copier après la connexion

La table de texte intégral MyISAM (par exemple, threads_ft) fournit la recherche index.

create table threads_ft (
...
subject varchar(255) not null,
fulltext (subject), -- fulltext index on subject
...
)
engine=myisam;
Copier après la connexion

Procédure stockée

La procédure stockée (par exemple, ft_search_threads) accepte le terme de recherche en entrée et effectue la recherche à l'aide de l'index de texte intégral MyISAM. Il joint ensuite les résultats aux tables InnoDB pour récupérer les données nécessaires.

create procedure ft_search_threads (
in p_search varchar(255)
)
begin
...
select
 t.*,
 ...
from
 threads_ft tft
...
match(tft.subject) against (p_search in boolean mode) 
...
order by 
 rank desc
...
end;
Copier après la connexion

Exemple d'utilisation

La procédure stockée peut être appelée depuis une application PHP ou un outil de ligne de commande :

call ft_search_threads('+innodb +clustered +index');
Copier après la connexion

Cet exemple renvoie les 100 premiers résultats de la table des threads qui correspondent au terme de recherche "innodb index clusterisé."

En utilisant cette approche, vous pouvez obtenir une fonctionnalité de recherche de type texte intégral sur les tables InnoDB sans compromettre les performances. Il s'agit de créer une table MyISAM dédiée à l'indexation et d'écrire une procédure stockée pour effectuer la recherche et la récupération des donné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