目前我有一个如下所示的表架构:
| id | visitor_ids | name |
|----|-------------|----------------|
| 1 | {abc,def} | Chris Houghton |
| 2 | {ghi} | Matt Quinn |
visitor_ids
都是GUID,为简单起见,我只是缩短了它们。
用户可以拥有多个访客ID,因此数组类型。
我在visitor_ids
字段上创建了一个GIN索引。
我希望能够通过访客ID查找用户。目前我们正在这样做:
SELECT *
FROM users
WHERE visitor_ids && array['abc'];
上面的工作,但它的规模确实很慢 - 它需要大约45ms,比主键查找慢约700倍。 (即使使用GIN指数)
当然,必须有一种更有效的方法吗?我环顾四周,却找不到任何东西。
我能想到的可能解决方案可能是:
帮助赞赏:)
答案 0 :(得分:0)
我尝试了第二种解决方案 - 速度提高了700倍。宾果
我觉得这是一个尚未解决的问题,但是,当性能如此糟糕时,即使使用索引,向Postgres添加数组的重点是什么?