postgresql 如何并行查询分区的psql?

7z5jn7bk  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(164)

我在aws postgresql中有一个表,按date_col分区,但索引在address上。
我有一个查询,要列出给定addressevent_name的所有项目
似乎没有全局辅助索引,因此每个查询将涉及所有分区。
如何改进查询?可以并行运行查询(借助分区键)?是否可以在gorm中执行此操作?
谢啦,谢啦
例如
explain select * from tbl where address = '0x5564' and event_name = 'Change';的输出为

->  Bitmap Heap Scan on tbl_2016 abl_2  (cost=37.86..41.86 rows=1 width=1087)
        Recheck Cond: (((address)::text = '0x5564'::text) AND ((event_name)::text = 'Change'::text))
        ->  BitmapAnd  (cost=37.86..37.86 rows=1 width=0)
              ->  Bitmap Index Scan on tbl_2016_address_idx  (cost=0.00..4.06 rows=227 width=0)
                    Index Cond: ((address)::text = '0x5564'::text)
              ->  Bitmap Index Scan on abl_2016_event_decoded_idx  (cost=0.00..33.79 rows=8874 width=0)
                    Index Cond: ((event)::text = 'Change'::text)
  ->  Bitmap Heap Scan on tbl_2017_01_01 tbl_3  (cost=4.01..11.80 rows=1 width=906)
        Recheck Cond: ((address)::text = '0x5564'::text)
        Filter: ((event)::text = 'Change'::text)
        ->  Bitmap Index Scan on tbl_2017_01_01_address_idx  (cost=0.00..4.01 rows=2 width=0)
              Index Cond: ((address)::text = '0x5564'::text)
  ->  Index Scan using tbl_2017_01_02_address_idx on tbl_2017_01_02 logs_4  (cost=0.01..8.01 rows=1 width=913)
        Index Cond: ((address)::text = '0x5564'::text)
        Filter: ((event)::text = 'Change'::text)
...

字符串
从解释计划看,查询似乎正在查询所有分区,但正在尝试使用每个分区上的索引...
我的问题是,有可能通过分区的帮助使查询并行运行。我应该在gorm中手动操作吗?
谢啦,谢啦

hts6caw3

hts6caw31#

并行查询和分区几乎是不相关的。事实上,分区可能会降低并行查询的效率。如果你想鼓励并行查询,你可以将parallel_*_cost设置为零。当然,这样做会鼓励并行查询,即使它会适得其反。
如果你想同时读取多个页面,增加effective_io_concurrency可能是一个更好的选择。

相关问题