J'ai la conception de tableau suivant avec un indice de texte intégral et la requête suivante:MySQL - INDEX FULL TEXTE SUR COLONNES FOIRE MIS À JOUR
CREATE TABLE artists (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title varchar(255) NOT NULL,
description text NOT NULL,
category_id INT NOT NULL,
-- some other columns excluded for brevity
FULLTEXT idx (title, description),
FOREIGN KEY fk_category(category_id) REFERENCES categories(id)
) ENGINE=InnoDB;
CREATE TABLE categories (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
name varchar(255) NOT NULL,
INDEX name_idx (name)
) ENGINE=InnoDB;
SELECT *
FROM artists
INNER JOIN categories on categories.id = artists.category_id
WHERE categories.name = 'Rock' AND MATCH (artists.name, artists.description) AGAINST ('Michael Jackson' IN BOOLEAN MODE);
maintenant le titre et la description sont susceptibles d'être mis à jour fréquemment. Si j'ai des milliers d'enregistrements dans la table des artistes, cela signifie-t-il que l'index de texte intégral sera recréé chaque fois qu'un utilisateur éditera un titre ou une description ou insérera un nouvel enregistrement?
Quelle serait une meilleure conception pour s'adapter à un tel scénario? Dois-je déplacer les champs de titre et de description dans un tableau séparé et cela fera-t-il une différence?
Tout conseil serait apprécié. Note Je connais là d'autres méthodes pour implémenter la recherche plein texte telle que solr, élastique etc. mais je suis limité à ce qui est présentement.
Utilisez-vous MyISAM ou InnoDB, et avez-vous lu la [documentation] (https://dev.mysql.com/doc/refman/5.7/fr/fulltext-fine-tuning.html)? –
@Tim son innodb comme indiqué dans le code affiché. Les docs ne donnent aucun conseil à ce sujet. – adam78
J'ai voté pour votre question. J'espère qu'un gourou de MySQL peut vous aider. –