Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何在postgresql上执行快速连接_Performance_Postgresql - Fatal编程技术网

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

Performance 如何在postgresql上执行快速连接,performance,postgresql,Performance,Postgresql,在ubuntu-15.10上使用postgres-9.4 对索引列上的两个表执行联接并获取Seq Scan 表a:~700万行,包含char()&varchar()&float,在date char(11)上有聚集的b树索引。每个日期1~2500行 表b:~6k行,包含2列date char(11)和feature float[]在date char(11)上也有聚集的b树索引。每个日期只有一条记录 我有以下查询,select中的cols太多太难看,因此我将其缩短: SELECT 6 reg

在ubuntu-15.10上使用postgres-9.4

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

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

b
:~6k行,包含2列
date char(11)和feature float[]
date char(11)
上也有聚集的b树索引。每个日期只有一条记录

我有以下查询,
select
中的
cols
太多太难看,因此我将其缩短:

SELECT
  6 regexp_split_to_array(a.char_cols),
  ARRAY[ a.all_float] || b.feature
FROM
  a JOIN b ON
a.date = b.date;
大约需要50000ms,使用
EXPLAIN-ANALYZE-VERBOSE
我得到以下结果:

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)
我试着从

但无论是
set random\u page\u cost=2,还是
set work\u mem='2048MB'
都不会产生任何影响:计划和时间保持不变

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

其他信息:

关于资源使用:


查询只需要一个逻辑核就可以工作,而且我有足够的内存(32GiB,当数据库大小时,此查询将不使用索引,因为查询正在使用所有700万行
public.a
。只有当您进行更严格的筛选,以便运行查询时只需要
public.a
中的一小部分行时,您才会看到索引被使用


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

此查询将不使用索引,因为查询正在使用所有700万行的
public.a
。只有当您进行更严格的筛选,以便只有
public.a
中的一小部分行需要运行查询时,您才会看到索引被使用

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

char()&varchar()&float,在date char(11)上具有聚集的b树索引
不是表的可读描述。请添加真实的DDL。
char()&varchar()&float,在日期char(11)上具有聚集b树索引。
不是表的可读描述。请添加真实的DDL。