分析:为什么查询时间可能会花费这么长时间,而且成本似乎很低?

Neavilag

我正在使用这些结果来分析一个简单的查询,该查询不会从少于200条记录的表中返回150条以上的记录,因为我有一个存储最新值的表,而其他字段是数据的FK。

更新:稍后将在同一查询中查看新结果。该网站不是公开的,并且/或者现在应该没有用户,因为它正在开发中。

 explain analyze
SELECT lv.station_id,
    s.name AS station_name,
    s.latitude,
    s.longitude,
    s.elevation,
    lv.element_id,
    e.symbol AS element_symbol,
    u.symbol,
    e.name AS element_name,
    lv.last_datetime AS datetime,
    lv.last_value AS valor,
    s.basin_id,
    s.municipality_id
   FROM (((element_station lv /*350 records*/
     JOIN stations s ON ((lv.station_id = s.id))) /*40 records*/
     JOIN elements e ON ((lv.element_id = e.id))) /*103 records*/
     JOIN units u ON ((e.unit_id = u.id))) /* 32 records */
  WHERE s.id = lv.station_id AND e.id = lv.element_id AND lv.interval_id = 6 and
lv.last_datetime >= ((now() - '06:00:00'::interval) - '01:00:00'::interval)

我已经尝试过了VACUUM,然后保存了一些,但是过一段时间后又恢复了。我已经在字段上实现了索引。

Nested Loop  (cost=0.29..2654.66 rows=1 width=92) (actual time=1219.390..35296.253 rows=157 loops=1)
  Join Filter: (e.unit_id = u.id)
  Rows Removed by Join Filter: 4867
  ->  Nested Loop  (cost=0.29..2652.93 rows=1 width=92) (actual time=1219.383..35294.083 rows=157 loops=1)
        Join Filter: (lv.element_id = e.id)
        Rows Removed by Join Filter: 16014
        ->  Nested Loop  (cost=0.29..2648.62 rows=1 width=61) (actual time=1219.301..35132.373 rows=157 loops=1)
              ->  Seq Scan on element_station lv  (cost=0.00..2640.30 rows=1 width=20) (actual time=1219.248..1385.517 rows=157 loops=1)
                    Filter: ((interval_id = 6) AND (last_datetime >= ((now() - '06:00:00'::interval) - '01:00:00'::interval)))
                    Rows Removed by Filter: 168
              ->  Index Scan using stations_pkey on stations s  (cost=0.29..8.31 rows=1 width=45) (actual time=3.471..214.941 rows=1 loops=157)
                    Index Cond: (id = lv.station_id)
        ->  Seq Scan on elements e  (cost=0.00..3.03 rows=103 width=35) (actual time=0.003..0.999 rows=103 loops=157)
  ->  Seq Scan on units u  (cost=0.00..1.32 rows=32 width=8) (actual time=0.002..0.005 rows=32 loops=157)
Planning time: 8.312 ms
Execution time: 35296.427 ms

更新,今晚运行相同的查询;没有变化:

Sort  (cost=601.74..601.88 rows=55 width=92) (actual time=1.822..1.841 rows=172 loops=1)
  Sort Key: lv.last_datetime DESC
  Sort Method: quicksort  Memory: 52kB
  ->  Nested Loop  (cost=11.60..600.15 rows=55 width=92) (actual time=0.287..1.680 rows=172 loops=1)
        ->  Hash Join  (cost=11.31..248.15 rows=55 width=51) (actual time=0.263..0.616 rows=172 loops=1)
              Hash Cond: (e.unit_id = u.id)
              ->  Hash Join  (cost=9.59..245.60 rows=75 width=51) (actual time=0.225..0.528 rows=172 loops=1)
                    Hash Cond: (lv.element_id = e.id)
                    ->  Bitmap Heap Scan on element_station lv  (cost=5.27..240.25 rows=75 width=20) (actual time=0.150..0.359 rows=172 loops=1)
                          Recheck Cond: ((last_datetime >= ((now() - '06:00:00'::interval) - '01:00:00'::interval)) AND (interval_id = 6))
                          Heap Blocks: exact=22
                          ->  Bitmap Index Scan on element_station_latest  (cost=0.00..5.25 rows=75 width=0) (actual time=0.136..0.136 rows=226 loops=1)
                                Index Cond: ((last_datetime >= ((now() - '06:00:00'::interval) - '01:00:00'::interval)) AND (interval_id = 6))
                    ->  Hash  (cost=3.03..3.03 rows=103 width=35) (actual time=0.062..0.062 rows=103 loops=1)
                          Buckets: 1024  Batches: 1  Memory Usage: 15kB
                          ->  Seq Scan on elements e  (cost=0.00..3.03 rows=103 width=35) (actual time=0.006..0.031 rows=103 loops=1)
              ->  Hash  (cost=1.32..1.32 rows=32 width=8) (actual time=0.019..0.019 rows=32 loops=1)
                    Buckets: 1024  Batches: 1  Memory Usage: 10kB
                    ->  Seq Scan on units u  (cost=0.00..1.32 rows=32 width=8) (actual time=0.003..0.005 rows=32 loops=1)
        ->  Index Scan using stations_pkey on stations s  (cost=0.29..6.39 rows=1 width=45) (actual time=0.005..0.006 rows=1 loops=172)
              Index Cond: (id = lv.station_id)
Planning time: 2.390 ms
Execution time: 2.009 ms
劳伦兹·阿尔伯

问题是在上连续扫描时错误估计了行数element_station自动分析已开始并为该表计算了新的统计信息,或者数据已更改。

问题可能是PostgreSQL不知道

((now() - '06:00:00'::interval) - '01:00:00'::interval)

在查询计划时。

如果可能,请分两个步骤进行操作:首先,计算上述表达式(在PostgreSQL或客户端)。然后以结果作为常量运行查询。这将使PostgreSQL更容易估计结果计数。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么向现有列添加可为空的默认约束会花费这么长时间?

来自分类Dev

为什么mongo总计花费这么长时间?

来自分类Dev

为什么查询在Entity Framework中花费这么长时间,而在SQL中却如此之快呢?

来自分类Dev

Postgres:了解为什么查询从应用程序中花费这么长时间但在psql中可以正常工作

来自分类Dev

为什么我的Google BigQuery查询花了这么长时间?

来自分类Dev

为什么查询在 BigQuery 中运行了这么长时间

来自分类Dev

为什么AES128解密在iPhone上花费这么长时间?

来自分类Dev

为什么IDLE 3.4在该程序上花费这么长时间?

来自分类Dev

为什么IDLE 3.4在该程序上花费这么长时间?

来自分类Dev

为什么修补程序145006需要花费这么长时间安装?

来自分类Dev

为什么 Google 地理编码使用 DownloadStringAsync(Uri, Object) C# 花费这么长时间

来自分类Dev

为什么排序需要这么长时间?

来自分类Dev

为什么mkntfs需要这么长时间?

来自分类Dev

为什么 IndexOrDocValuesQuery 需要这么长时间?

来自分类Dev

为什么在数据库中向用户添加帖子会花费这么长时间,并且如何提高速度?

来自分类Dev

为什么在我使用G1GC时Scan RS会花费很长时间

来自分类Dev

为什么按组进行mutate()会花费很长时间?

来自分类Dev

从S3读取内容时,为什么我的LZO索引在Amazon的EMR上花费这么长时间?

来自分类Dev

谁能帮我弄清楚为什么这些SQL查询要花这么长时间?

来自分类Dev

为什么我的查询需要这么长时间才能产生结果

来自分类Dev

为什么这个简单的ArangoDB查询有时会花费很长时间

来自分类Dev

为什么我的程序需要这么长时间才能运行?

来自分类Dev

为什么嵌套的for循环需要这么长时间才能计算?

来自分类Dev

为什么从Visual Studio部署Azure需要这么长时间?

来自分类Dev

为什么创建表格需要这么长时间?

来自分类Dev

为什么这个for循环要花这么长时间?

来自分类Dev

为什么docker build需要这么长时间才能运行?

来自分类Dev

Postgres:为什么选择count(*)需要这么长时间

来自分类Dev

为什么删除Kafka主题需要这么长时间?

Related 相关文章

  1. 1

    为什么向现有列添加可为空的默认约束会花费这么长时间?

  2. 2

    为什么mongo总计花费这么长时间?

  3. 3

    为什么查询在Entity Framework中花费这么长时间,而在SQL中却如此之快呢?

  4. 4

    Postgres:了解为什么查询从应用程序中花费这么长时间但在psql中可以正常工作

  5. 5

    为什么我的Google BigQuery查询花了这么长时间?

  6. 6

    为什么查询在 BigQuery 中运行了这么长时间

  7. 7

    为什么AES128解密在iPhone上花费这么长时间?

  8. 8

    为什么IDLE 3.4在该程序上花费这么长时间?

  9. 9

    为什么IDLE 3.4在该程序上花费这么长时间?

  10. 10

    为什么修补程序145006需要花费这么长时间安装?

  11. 11

    为什么 Google 地理编码使用 DownloadStringAsync(Uri, Object) C# 花费这么长时间

  12. 12

    为什么排序需要这么长时间?

  13. 13

    为什么mkntfs需要这么长时间?

  14. 14

    为什么 IndexOrDocValuesQuery 需要这么长时间?

  15. 15

    为什么在数据库中向用户添加帖子会花费这么长时间,并且如何提高速度?

  16. 16

    为什么在我使用G1GC时Scan RS会花费很长时间

  17. 17

    为什么按组进行mutate()会花费很长时间?

  18. 18

    从S3读取内容时,为什么我的LZO索引在Amazon的EMR上花费这么长时间?

  19. 19

    谁能帮我弄清楚为什么这些SQL查询要花这么长时间?

  20. 20

    为什么我的查询需要这么长时间才能产生结果

  21. 21

    为什么这个简单的ArangoDB查询有时会花费很长时间

  22. 22

    为什么我的程序需要这么长时间才能运行?

  23. 23

    为什么嵌套的for循环需要这么长时间才能计算?

  24. 24

    为什么从Visual Studio部署Azure需要这么长时间?

  25. 25

    为什么创建表格需要这么长时间?

  26. 26

    为什么这个for循环要花这么长时间?

  27. 27

    为什么docker build需要这么长时间才能运行?

  28. 28

    Postgres:为什么选择count(*)需要这么长时间

  29. 29

    为什么删除Kafka主题需要这么长时间?

热门标签

归档