2010-10-13 1 views
0

Hey, j'essaie de créer un système pour faire correspondre les noms de domaine génériques. Bien que la requête ci-dessus fonctionnera pour moi est-il possible de l'indexer du tout?Est-il possible d'indexer "SELECT domain_name de domaines WHERE" x.example.com "like domain_name" où domain_name contient "% .example.com"

Je n'ai pas accès à la base de données pour faire des choses intelligentes car j'utilise Heroku pour héberger mon application mais je peux facilement ajouter des index?

Merci!

Edit:

Je voudrais correspondre aux noms de domaine génériques dans ma base de données. J'ai donc une table avec une colonne appelée domain_name et cela peut contenir quelque chose comme '% .example.com' pour correspondre si je passe x.example.com ou hello.example.com en tant que paramètre d'entrée.

+0

double possible de [la différence entre les performances des deux requêtes SQL?] (Http://stackoverflow.com/questions/ 3486472/difference-between-performance-of-the-two-sql-query) –

+0

@Kirk Woll: C'est pour MySQL, pas pour PostgreSQL –

+0

Je ne suis pas sûr que ce soit la même chose parce que le côté sur lequel les éléments apparaissent peuvent être pertinent. –

Répondre

3

Utilisez la fonction inverse et l'index de fonction. http://www.postgres.cz/index.php/PostgreSQL_SQL_Tricks

Si vous utilisez Postgresql 9.1 fonction "inverse" est construit dans.

CREATE OR REPLACE FUNCTION reverse(varchar) RETURNS varchar AS $$ 
    $reversed = reverse $_[0]; 
    return $reversed; 
$$ LANGUAGE plperlu IMMUTABLE; 

CREATE INDEX rev_email ON users((reverse(email)) varchar_pattern_ops); 
SELECT * FROM _users WHERE reverse(email) LIKE reverse ('%.cz'); 
+0

Est-ce que cela fonctionne quand c'est en fait la colonne sur le côté droit, je suppose que c'est le cas? On dirait une belle solution. Je l'accepterai si rien d'autre ne semble fonctionner correctement avec la colonne contenant le%. –

Questions connexes