我有一个PostgreSQL数据库,存储多个用户账户的联系人信息表(名字和姓氏)。每个联系人行都有一个用户ID列。为了使用户能够搜索他们联系人姓名的前几个字母,最高效的建立索引的方法是什么?我知道传统的B树索引和PG特定的GIN和GiST索引,但我不确定它们如何结合使用,以便只需搜索用户ID之前的联系人即可过滤结果,而不必搜索所有联系人。
CREATE INDEX contacts_firstname_idx ON contacts(aid, lower(firstname) text_pattern_ops);
CREATE INDEX contacts_lastname_idx ON contacts(aid, lower(lastname) text_pattern_ops);
SELECT * FROM contacts WHERE aid = 123 AND
(lower(firstname) LIKE 'an%' OR lower(lastname) LIKE 'an%')