Je crois que vous avez l'intention d'écrire la requête suivante:
SELECT *
FROM my_table
WHERE mytable.some_column LIKE 'some_string%';
En d'autres termes, vous voulez trouver des enregistrements où une colonne commence par some_string
suivi de quoi que ce soit, peut-être rien du tout. Pour autant que je sache, un index B-tree classique sur some_column
sera efficace, dans une certaine mesure, dans votre requête. La raison en est que Postgres peut traverser l'arbre à la recherche du préfixe some_string
. Une fois qu'il a trouvé cette entrée, au-delà, l'index pourrait ne pas aider. Mais un indice sur some_column
devrait vous donner quelques avantages de performance ici.
Une condition où un indice ne pas aide serait la suivante:
WHERE mutable.some_column LIKE '%some_string';
Dans ce cas, l'indice est rendu la plupart du temps inutile, parce que nous avons aucune idée avec ce préfixe la valeur de colonne doit commencer .
S'il vous plaît confirmer: ' 'some_string' LIKE mytable.some_column || '%' ', pas' mytable.some_column LIKE 'une_chaîne%' '? Si oui, combien de temps vos chaînes peuvent-elles être (min/moy/max)? Combien de lignes dans la table, combien de chaînes distinctes? En outre: Votre version de Postgres et la définition de table montrant le type de données et les contraintes pour les colonnes pertinentes et les index associés que vous avez. –