PostgreSQL:尽管具有GiN索引,但仍在Hstore列上进行顺序表扫描

痛手指

我有一个带有一hstore的表,大约有22个mio记录(来自部分osm数据库的ways表)。

尽管hstore列上GIN索引,但查询特定标签会导致顺序表扫描而该顺序表扫描需要60秒以上的时间才能返回单个列。

到目前为止,我一直在做什么。

  1. 我使用pgAdminIII创建了GIN索引。
  2. 执行中 vacuum analayze
  3. 执行这种查询: select id from table where tags->'name'='foo'
  4. 删除索引并再次从1.开始...
  5. [编辑]根据用户a_horse_with_no_name的建议,我通过analyze在表上执行来更新表统计信息但这没有效果。

在此处输入图片说明

您可以在此处查看查询计划由于某种原因,explain analyze仅需约20秒即可完成。

我如何在这样的大表上正确索引hstore列,以显着降低查询执行成本?

谢谢您的帮助!

a_horse_with_no_name

我看到两种可能的解决方案:

如果您始终查询该键值是否相等,则可以在表达式上使用B树索引(`标签->'名称')

create index idx_name on ways ( (tags -> 'name') );

快速测试表明,Postgres确实使用索引来查找hstore列中是否存在键值,但显然不是用于查找关联的值。

因此,您也可以尝试添加条件来测试该键值:

select id
from ways
where tags ? 'name' 
  and tags -> 'name' = 'Wiehbergpark';

如果所有行都包含该键,则可能无济于事。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PostgreSQL 11 在索引应该足够的分区表上进行并行 seq 扫描

来自分类Dev

使用索引或位图索引扫描在时间戳上进行高效的PostgreSQL查询?

来自分类Dev

Azure表查询哪个更快:在任意列上进行单个查询,还是在具有行/分区键的情况下进行多个查询?

来自分类Dev

Python-在列上具有多个索引的数据透视表

来自分类Dev

如何减少具有复合索引的表的扫描计数?

来自分类Dev

查询中未使用 PostgreSql jsonb 列上的 GIN 索引

来自分类Dev

在单个列上进行透视,但具有对角历史客户访问视图

来自分类Dev

在具有不同 WHERE 的一列上进行多项选择

来自分类Dev

如何在熊猫多索引内的列上进行操作

来自分类Dev

在多索引列上进行瓶坯聚合

来自分类Dev

在索引列上进行cassandra过滤不起作用

来自分类Dev

PostgreSQL:如何在非聚合列上进行选择?

来自分类Dev

如何在PostgreSQL的结果列上进行累加和运算?

来自分类Dev

为什么查询具有索引时为什么要进行聚集索引扫描

来自分类Dev

在一个表中的列上进行排名

来自分类Dev

SQL Join在不同的列上进行多次表分析

来自分类Dev

BigQuery:在具有不同字段顺序的重新定义的字段上进行合并

来自分类Dev

对索引列进行全表扫描?

来自分类Dev

分区表查询仍在扫描所有分区

来自分类Dev

在表上进行Seq扫描的原因是什么?

来自分类Dev

在Pandas Dataframe中的两列上进行分组依据,其中一列具有bins(范围)

来自分类Dev

对具有特定值顺序的数据表进行排序

来自分类Dev

即使我在IGroupes表上有索引,为什么还要进行表扫描?

来自分类Dev

Postgres Hstore:GIN与GiST索引性能

来自分类Dev

如何避免在所有列上进行saveOrUpdate休眠

来自分类Dev

如何在SQLAlchemy中的文本数组列上创建GIN索引(使用PostgreSQL和python)

来自分类Dev

在具有GROUP BY和ORDER BY条件的两个MySQL表上进行联结和联合

来自分类Dev

在具有数百万条记录的表上进行实时聚合

来自分类Dev

PostgreSQL合并具有相同键(hstore或json)的行

Related 相关文章

  1. 1

    PostgreSQL 11 在索引应该足够的分区表上进行并行 seq 扫描

  2. 2

    使用索引或位图索引扫描在时间戳上进行高效的PostgreSQL查询?

  3. 3

    Azure表查询哪个更快:在任意列上进行单个查询,还是在具有行/分区键的情况下进行多个查询?

  4. 4

    Python-在列上具有多个索引的数据透视表

  5. 5

    如何减少具有复合索引的表的扫描计数?

  6. 6

    查询中未使用 PostgreSql jsonb 列上的 GIN 索引

  7. 7

    在单个列上进行透视,但具有对角历史客户访问视图

  8. 8

    在具有不同 WHERE 的一列上进行多项选择

  9. 9

    如何在熊猫多索引内的列上进行操作

  10. 10

    在多索引列上进行瓶坯聚合

  11. 11

    在索引列上进行cassandra过滤不起作用

  12. 12

    PostgreSQL:如何在非聚合列上进行选择?

  13. 13

    如何在PostgreSQL的结果列上进行累加和运算?

  14. 14

    为什么查询具有索引时为什么要进行聚集索引扫描

  15. 15

    在一个表中的列上进行排名

  16. 16

    SQL Join在不同的列上进行多次表分析

  17. 17

    BigQuery:在具有不同字段顺序的重新定义的字段上进行合并

  18. 18

    对索引列进行全表扫描?

  19. 19

    分区表查询仍在扫描所有分区

  20. 20

    在表上进行Seq扫描的原因是什么?

  21. 21

    在Pandas Dataframe中的两列上进行分组依据,其中一列具有bins(范围)

  22. 22

    对具有特定值顺序的数据表进行排序

  23. 23

    即使我在IGroupes表上有索引,为什么还要进行表扫描?

  24. 24

    Postgres Hstore:GIN与GiST索引性能

  25. 25

    如何避免在所有列上进行saveOrUpdate休眠

  26. 26

    如何在SQLAlchemy中的文本数组列上创建GIN索引(使用PostgreSQL和python)

  27. 27

    在具有GROUP BY和ORDER BY条件的两个MySQL表上进行联结和联合

  28. 28

    在具有数百万条记录的表上进行实时聚合

  29. 29

    PostgreSQL合并具有相同键(hstore或json)的行

热门标签

归档