Postgres忽略日期查询中的聚集索引

阿布

我有一张大桌子,可以定期运行类似select date_att> date'2001-01-01'的查询。我试图通过将表聚集在date_att上来提高这些查询的速度,但是当我通过explain analysis运行那些查询时,它仍然选择顺序扫描表,即使在像date_att> date的SELECT date_att这样简单的查询上也是如此。 '2001-01-01'。为什么会这样呢?我知道,由于查询返回了表的很大一部分,优化器将忽略索引,但是由于表是由该属性聚集的,因此它不应该能够真正快速地对表进行二进制搜索到日期所在的位置>“ 2001-01-01”,然后返回所有结果?与不进行群集查询相比,此查询仍需要花费大量时间。

马库斯·温南

似乎您在混淆两个概念:

表的PostgreSQL集群

根据PostgreSQL中的索引对表进行集群,可将表行(存储在堆表中)的顺序与集群时索引的顺序对齐从文档:

集群是一项一次性操作:表在随后进行更新时,更改不会集群。http://www.postgresql.org/docs/9.3/static/sql-cluster.html

聚簇有可能(通常)提高范围查询的查询速度,因为选定的行通过巧合存储在堆表附近没有什么可以保证此订单!因此,优化器无法假定它是正确的。

例如,如果插入满足where子句的新行,则该行可能会插入表中的任何位置,例如,存储1990年的行的位置。因此,这种假设不成立:

但是由于表是由该属性聚类的,所以它不应该能够真正快速地二进制>搜索表到date>'2001-01-01'并在此之后返回所有结果的点吗?

这将我们带到您提到的另一个概念:

聚集索引

这是完全不同的东西,PostgreSQL完全不支持,但是许多其他数据库(SQL Server,带有InnoDB的MySQL以及Oracle在这里称为“索引组织表”)也完全不支持。

在这种情况下,表数据本身存储在索引结构中-没有单独的堆结构!由于它是一个索引,因此每个insert/ update/的顺序也都保持不变delete因此,您的假设将成立,实际上,我希望上述数据库的行为与您期望的一样(假定该date列是聚簇键!)。

希望能澄清这一点。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

非聚集过滤索引中 WHERE 子句中的子查询

来自分类Dev

PostgreSQL中的聚集索引?

来自分类Dev

特定查询的聚集索引改进

来自分类Dev

查询中的Postgres日期减法

来自分类Dev

SQL Server中的聚集索引

来自分类Dev

防止在Postgres中对特定查询使用索引

来自分类Dev

聚集索引中列的最佳顺序

来自分类Dev

SQL查询优化:从非聚集索引获取额外的列数据

来自分类Dev

非聚集索引将部分覆盖选择查询

来自分类Dev

在Postgres中的多行插入查询中返回插入行的索引

来自分类Dev

按聚集列存储索引中的索引排序

来自分类Dev

SQL Server中的唯一键是聚集索引还是非聚集索引?

来自分类Dev

具有聚集索引的表在Azure中的聚集索引错误

来自分类Dev

为什么这个简单的查询不使用postgres中的索引?

来自分类Dev

使用日期对组中的子查询计算索引位置

来自分类Dev

使用日期对组中的子查询计算索引位置

来自分类Dev

如何查询 ElasticSearch 中两个日期之间的索引?

来自分类Dev

Postgres 索引删除查询性能

来自分类Dev

ORDER BY被忽略,因为表中有用户定义的聚集索引

来自分类Dev

CosmosDB 查询日期范围 + 索引

来自分类Dev

聚集索引中的“簇”是什么意思?

来自分类Dev

是否可以从表的列中删除非聚集索引?

来自分类Dev

如何通过 SQL Server 中的提示禁用聚集索引?

来自分类Dev

什么顺序是空存储在非聚集索引中

来自分类Dev

sql server 如何在复合非聚集索引中查找?

来自分类Dev

postgres json_agg()忽略GROUP BY表达式中联接表中的索引

来自分类Dev

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

来自分类Dev

日期类型的查询子索引是哪个索引?

来自分类Dev

查询时间范围而忽略时间戳记的日期

Related 相关文章

  1. 1

    非聚集过滤索引中 WHERE 子句中的子查询

  2. 2

    PostgreSQL中的聚集索引?

  3. 3

    特定查询的聚集索引改进

  4. 4

    查询中的Postgres日期减法

  5. 5

    SQL Server中的聚集索引

  6. 6

    防止在Postgres中对特定查询使用索引

  7. 7

    聚集索引中列的最佳顺序

  8. 8

    SQL查询优化:从非聚集索引获取额外的列数据

  9. 9

    非聚集索引将部分覆盖选择查询

  10. 10

    在Postgres中的多行插入查询中返回插入行的索引

  11. 11

    按聚集列存储索引中的索引排序

  12. 12

    SQL Server中的唯一键是聚集索引还是非聚集索引?

  13. 13

    具有聚集索引的表在Azure中的聚集索引错误

  14. 14

    为什么这个简单的查询不使用postgres中的索引?

  15. 15

    使用日期对组中的子查询计算索引位置

  16. 16

    使用日期对组中的子查询计算索引位置

  17. 17

    如何查询 ElasticSearch 中两个日期之间的索引?

  18. 18

    Postgres 索引删除查询性能

  19. 19

    ORDER BY被忽略,因为表中有用户定义的聚集索引

  20. 20

    CosmosDB 查询日期范围 + 索引

  21. 21

    聚集索引中的“簇”是什么意思?

  22. 22

    是否可以从表的列中删除非聚集索引?

  23. 23

    如何通过 SQL Server 中的提示禁用聚集索引?

  24. 24

    什么顺序是空存储在非聚集索引中

  25. 25

    sql server 如何在复合非聚集索引中查找?

  26. 26

    postgres json_agg()忽略GROUP BY表达式中联接表中的索引

  27. 27

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

  28. 28

    日期类型的查询子索引是哪个索引?

  29. 29

    查询时间范围而忽略时间戳记的日期

热门标签

归档