私は現在次のものを持っています:
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
しかし、問題は、このクエリが非常に遅く、最初のクエリを高速化するためにインデックスを使用していないように見えることです。2番目のクエリ(az以外)をエレガントに高速化する方法についての提案はありますか?
Rails3.2でPostgres9.1を使用しています
ありがとう