Postgres数组字段:查找数组包含值的位置

时间:2015-10-22 15:19:34

标签: postgresql

目前我有一个如下所示的表架构:

| 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指数)

当然,必须有一种更有效的方法吗?我环顾四周,却找不到任何东西。

我能想到的可能解决方案可能是:

  • 当前查询很糟糕,需要改进
  • 使用单独的user_visitor_ids表
  • 使用特殊索引聪明的东西

帮助赞赏:)

1 个答案:

答案 0 :(得分:0)

我尝试了第二种解决方案 - 速度提高了700倍。宾果

我觉得这是一个尚未解决的问题,但是,当性能如此糟糕时,即使使用索引,向Postgres添加数组的重点是什么?