是否可以索引“从域名WHERE'x.example.com'中选择domain domain_name,如domain_name”,其中domain_name包含“%.example.com”

时间:2010-10-13 20:00:59

标签: sql postgresql query-optimization

嘿,我正在尝试创建一个匹配通配符域名的系统。虽然上面的查询对我有用,但是可以对它进行索引吗?

我无法访问数据库做任何聪明的事情,因为我使用Heroku来托管我的应用程序,但我可以轻松添加索引吗?

谢谢!

编辑:

我想在我的数据库中匹配通配符域名。所以我有一个名为domain_name的列表,如果我将x.example.com或hello.example.com作为输入参数传入,则可以包含类似'%.example.com'的内容。

1 个答案:

答案 0 :(得分:3)

使用反向功能和功能索引。 http://www.postgres.cz/index.php/PostgreSQL_SQL_Tricks

如果你使用Postgresql 9.1“反向”功能是内置的。

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');