Postgresql r这两台服务器都可以提供帮助,但可能还不够。当使用fast计划时,从慢速服务器上看到解释(分析,缓冲)也会很好。为此,可以删除错误的索引,或者更改查询,使其使用orderby(big_table.created_at+interval“0”)desc。您不需要让应用程序运行此查询,您可以手动运行

Postgresql r这两台服务器都可以提供帮助,但可能还不够。当使用fast计划时,从慢速服务器上看到解释(分析,缓冲)也会很好。为此,可以删除错误的索引,或者更改查询,使其使用orderby(big_table.created_at+interval“0”)desc。您不需要让应用程序运行此查询,您可以手动运行,postgresql,query-performance,Postgresql,Query Performance,仔细想想,对于运行慢速计划的快速服务器,查看EXPLAIN(ANALYZE,BUFFERS)可能更有用。您可以将查询更改为使用…WHERE(“big_table”。.user_id“+0=13)和…创建的_at列的数据类型是什么?可能正在进行数据类型缩小/扩大操作,禁止使用索引。为了了解正在发生的事情,请尝试在没有时区的情况下取消对时间戳的强制转换。这会改变计划吗?@a_horse_,没有名字,谢谢你的提示,我会相应地更新问题。@blubb很遗憾,我不能像上面提到的那样更改查询。在列创建的类型为

仔细想想,对于运行慢速计划的快速服务器,查看
EXPLAIN(ANALYZE,BUFFERS)
可能更有用。您可以将查询更改为使用
…WHERE(“big_table”。.user_id“+0=13)和…

创建的_at列的数据类型是什么?可能正在进行数据类型缩小/扩大操作,禁止使用索引。为了了解正在发生的事情,请尝试在没有时区的情况下取消对时间戳的强制转换。这会改变计划吗?@a_horse_,没有名字,谢谢你的提示,我会相应地更新问题。@blubb很遗憾,我不能像上面提到的那样更改查询。在列创建的
类型为不带时区的
时间戳
。删除强制转换操作不会改变
EXPLAIN
输出中的任何内容。创建的\u at列的数据类型是什么?可能正在进行数据类型缩小/扩大操作,禁止使用索引。为了了解正在发生的事情,请尝试在没有时区的情况下取消对时间戳的强制转换。这会改变计划吗?@a_horse_,没有名字,谢谢你的提示,我会相应地更新问题。@blubb很遗憾,我不能像上面提到的那样更改查询。在
列创建的
类型为不带时区的
时间戳
。删除强制转换操作不会改变
EXPLAIN
输出中的任何内容。“无法知道…的所有内容也是很久以前创建的”-我想知道是否可以通过在这些列上创建扩展的统计信息来改进这一点。@a_horse_与_no_name我没有运气。我认为它只是将这些用于选择性,而不是选择性如何与顺序相互作用。也许有一天。谢谢你的评论,我刚刚添加了查询计划的输出,并启用了上述标志。对于你的问题,我最终正在寻求解决方案,但我想了解这里的问题是什么。特别是因为如果我不理解这个问题,我不能完全确定额外的索引是否解决了这个问题。“无法知道…的所有内容也是很久以前创建的”-我想知道是否可以通过在这些列上创建扩展的统计数据来改进这一点。@a_horse_,没有名字,我没有运气。我认为它只是将这些用于选择性,而不是选择性如何与顺序相互作用。也许有一天。谢谢你的评论,我刚刚添加了查询计划的输出,并启用了上述标志。对于你的问题,我最终正在寻求解决方案,但我想了解这里的问题是什么。特别是因为如果我不理解这个问题,我不能完全确定附加索引是否解决了这个问题。
local_host=# EXPLAIN SELECT COUNT(*) FROM (SELECT  1 AS one FROM "big_table" WHERE "big_table"."user_id" = 13 AND "big_table"."action" = 1 AND (big_table.created_at >= '2018-12-09 23:00:00'::timestamp without time zone) ORDER BY big_table.created_at desc LIMIT 15 OFFSET 10) subquery_for_count;
                                                              QUERY PLAN                                                              
--------------------------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost=8.59..8.60 rows=1 width=8)
   ->  Limit  (cost=8.57..8.58 rows=1 width=12)
         ->  Sort  (cost=8.57..8.57 rows=1 width=12)
               Sort Key: big_table.created_at DESC
               ->  Index Scan using big_table_idx_user_action_transfers on big_table  (cost=0.56..8.56 rows=1 width=12)
                     Index Cond: ((user_id = 13) AND (action = 1))
                     Filter: (created_at >= '2018-12-09 23:00:00'::timestamp without time zone)
(7 rows)
remote_host=# EXPLAIN SELECT COUNT(*) FROM (SELECT  1 AS one FROM "big_table" WHERE "big_table"."user_id" = 13 AND "big_table"."action" = 1 AND (big_table.created_at >= '2018-12-09 23:00:00'::timestamp without time zone) ORDER BY big_table.created_at desc LIMIT 15 OFFSET 10) subquery_for_count;
                                                                 QUERY PLAN                                                                  
---------------------------------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost=8472.67..8472.68 rows=1 width=8)
   ->  Limit  (cost=3389.25..8472.48 rows=15 width=12)
         ->  Index Scan Backward using index_big_table_on_created_at on big_table  (cost=0.44..4492554.51 rows=13257 width=12)
               Index Cond: (created_at >= '2018-12-09 23:00:00'::timestamp without time zone)
               Filter: ((user_id = 13) AND (action = 1))
(5 rows)
remote_host=# EXPLAIN (ANALYZE, BUFFERS) SELECT COUNT(*) FROM (SELECT  1 AS one FROM "big_table" WHERE "big_table"."user_id" = 874 AND "big_table"."action" = 1 AND (big_table.created_at >= '2018-12-09 23:00:00') ORDER BY big_table.created_at desc LIMIT 15 OFFSET 10) subquery_for_count;

                                                                                           QUERY PLAN                                                                                           
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost=8539.91..8539.92 rows=1 width=8) (actual time=206301.833..206301.833 rows=1 loops=1)
   Buffers: shared hit=16082155 read=550889 dirtied=3
   ->  Limit  (cost=3416.15..8539.73 rows=15 width=12) (actual time=206301.826..206301.826 rows=0 loops=1)
         Buffers: shared hit=16082155 read=550889 dirtied=3
         ->  Index Scan Backward using index_big_table_on_created_at on big_table  (cost=0.44..4515235.12 rows=13219 width=12) (actual time=67472.247..206301.821 rows=2 loops=1)
               Index Cond: (created_at >= '2018-12-09 23:00:00'::timestamp without time zone)
               Filter: ((user_id = 874) AND (action = 1))
               Rows Removed by Filter: 26362926
               Buffers: shared hit=16082155 read=550889 dirtied=3
 Planning time: 2.003 ms
 Execution time: 206302.505 ms
(11 rows)
local_host=# EXPLAIN (ANALYZE, BUFFERS) SELECT COUNT(*) FROM (SELECT  1 AS one FROM "big_table" WHERE "big_table"."user_id" = 874 AND "big_table"."action" = 1 AND (big_table.created_at >= '2018-12-09 23:00:00') ORDER BY big_table.created_at desc LIMIT 15 OFFSET 10) subquery_for_count;

                                                                                   QUERY PLAN                                                                                   
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost=6.37..6.38 rows=1 width=8) (actual time=0.046..0.046 rows=1 loops=1)
   Buffers: shared hit=4
   ->  Limit  (cost=6.35..6.35 rows=1 width=12) (actual time=0.043..0.043 rows=0 loops=1)
         Buffers: shared hit=4
         ->  Sort  (cost=6.34..6.35 rows=1 width=12) (actual time=0.041..0.041 rows=0 loops=1)
               Sort Key: big_table.created_at DESC
               Sort Method: quicksort  Memory: 25kB
               Buffers: shared hit=4
               ->  Index Scan using big_table_idx_user_action_transfers on big_table  (cost=0.56..6.33 rows=1 width=12) (actual time=0.022..0.022 rows=0 loops=1)
                     Index Cond: ((user_id = 874) AND (action = 1))
                     Filter: (created_at >= '2018-12-09 23:00:00'::timestamp without time zone)
                     Buffers: shared hit=4
 Planning time: 0.299 ms
 Execution time: 0.104 ms
(14 rows)