首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在postgresql上执行快速连接

如何在postgresql上执行快速连接
EN

Stack Overflow用户
提问于 2016-03-06 15:28:23
回答 1查看 4.2K关注 0票数 0

在ubuntu-15.10上使用postgres-9.4

对索引列上的两个表执行联接并获取Seq Scan

a:~700万行,包含char()&varchar()&float,在date char(11)上有聚集的b-树索引.每个日期1~2500行。

b:~6k行,包含2个cols date char(11) and feature float[]也有集群b树索引在date char(11)上.每个日期只有一个记录。

我有一个查询,cols中的select太多了,太丑了,所以我把它写得很短:

代码语言:javascript
复制
SELECT
  6 regexp_split_to_array(a.char_cols),
  ARRAY[ a.all_float] || b.feature
FROM
  a JOIN b ON
a.date = b.date;

它需要大约500000毫秒,并使用EXPLAIN ANALYZE VERBOSE,我的结果如下:

代码语言:javascript
复制
QUERY PLAN
-----------------------------------------------------------------------------
 Hash Join  (cost=501.67..790703.48 rows=7154354 width=856) (actual time=3.216..49223.885 rows=7154589 loops=1)
   Output: A_LOT_MESS
   Hash Cond: (a.date = b.date)
   ->  Seq Scan on public.a  (cost=0.00..521913.54 rows=7154354 width=440) (actual time=0.001..967.771 rows=7154589 loops=1)
     Output: EVERY_COLS_OF_A
   ->  Hash  (cost=424.63..424.63 rows=6163 width=428) (actual time=3.157..3.157 rows=6163 loops=1)
     Output: b.feature, b.date
     Buckets: 1024  Batches: 1  Memory Usage: 2769kB
     ->  Seq Scan on public.b  (cost=0.00..424.63 rows=6163 width=428) (actual time=0.003..1.156 rows=6163 loops=1)
           Output: b.feature, b.date
 Planning time: 1.041 ms
 Execution time: 49396.419 ms
(12 rows)

我试过了PostgreSQL query runs faster with index scan, but engine chooses hash join的建议

set random_page_cost = 2set work_mem = '2048MB'都不能产生任何效果:计划和时间保持不变。

我看到一些文章说位图索引扫描可以做得更好,但我不知道如何创建这样的索引: postgres似乎是决定在查询某些内容时是否应该生成它的人。

其他信息:

关于资源使用情况:

查询只需要一个逻辑核心就可以工作,我有足够的内存(32 6GiB,当数据库大小<6GiB时)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-06 15:57:41

此查询将不使用索引,因为查询将使用public.a的所有700万行。只有当您做了一个限制性更强的过滤器,只需要在public.a中的一小部分行来运行查询时,您才会看到索引被使用了。

如果您查看查询的实际运行时间,就会注意到顺序扫描花费不到1秒(准确地说是967.771毫秒),而连接则需要大约48秒。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35828732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档