目前,我有以下幾點:更快地搜索字段第一個字符不匹配的記錄[A-Za-z]?
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
但問題是,這個查詢很慢,似乎並沒有被使用索引,以加快第一個查詢。有關如何優雅地使第二個查詢(非a-z)更快的建議?
我使用的Postgres 9.1與3.2的軌道
感謝
感謝您展示您的版本。如果您將兩個查詢的'EXPLAIN ANALYZE'粘貼到http://explain.depesz,可能會有所幫助。com /並且在這裏與他們相關聯(你應該爲所有性能問題做這件事),儘管在這種情況下,第一個是使用第二個不能的索引是合理的。 –
請將它們鏈接到以前的相關問題,它有助於使答案更容易。 –