我目前有以下内容:
User (id, fname, lname, deleted_at, guest)
fname
我可以通过他们的初始查询用户列表,如下所示:
User Load (9.6ms) SELECT "users".* FROM "users" WHERE (users.deleted_at IS NULL) AND (lower(left(fname, 1)) = 's') ORDER BY fname ASC LIMIT 25 OFFSET 0
由于以下索引,这很快:
CREATE INDEX users_multi_idx
ON users (lower(left(fname, 1)), fname)
WHERE deleted_at IS NULL;
我现在要做的是能够查询所有不以字母AZ开头的用户。我让它像这样工作:
SELECT "users".* FROM "users" WHERE (users.deleted_at IS NULL) AND (lower(left(fname, 1)) ~ E'^[^a-zA-Z].*') ORDER BY fname ASC LIMIT 25 OFFSET 0
但问题是这个查询很慢,似乎没有使用索引来加速第一次查询。关于如何优雅地使第二个查询(非 az)更快的任何建议?
我正在使用带有 rails 3.2 的 Postgres 9.1
谢谢