2010-07-19 7 views
3

J'ai un index FULLTEXT appelé cart_product_fti sur une tablefuture épreuve FULLTEXT recherche

Chaque fois que je l'utilise, je dois énumérer tous les champs qui sont exactement à l'index:

MATCH (foo,bar,etc) 

Mes pensées sont , si plus tard je décide d'ajouter/supprimer un champ à l'index, tous les scripts devront être mis à jour sinon ils seront cassés. Donc je me demande s'il existe un moyen d'obtenir une liste de tous les champs de l'index, puis d'insérer la liste dans mon MATCH() afin qu'il ne soit pas nécessaire de le mettre à jour si une modification est apportée à l'index FULLTEXT ?

Répondre

1

solutions possibles:

  • Il suffit de faire le travail. Un projet correctement structuré ne possède probablement que 1 ou 2 classes ou fichiers avec la requête/datarelation spécifique, il ne devrait donc pas y avoir beaucoup de travail.

  • Continuez à interroger information_schema.statistics encore et encore pour chaque requête pour créer une requête dynamiquement (à peine efficace).

  • Définissez une procédure stockée qui effectue une recherche dans la table, auquel cas la modification de la disposition de l'index table/fulltext ne nécessiterait qu'une seule modification de la procédure.

Edit: pour une raison key_column_usage ne semble pas tenir une référence FULLTEXT, et nous devons recourir à la table information_schema.statistics?

1

Pour lister tous les champs de l'index, vous pouvez utiliser la commande SQL SHOW INDEXES FROM <table>.

Il listera chaque index dans la table, et pour les index avec plusieurs colonnes, vous aurez une entrée pour chaque colonne. Vous ne devez utiliser cette solution qu'avec la mise en cache correcte de la liste de colonnes pour l'index.

Une autre solution dans votre cas serait de stocker la liste dans un fichier de configuration, et de vous assurer de mettre à jour la configuration si la structure de la base de données change.