GVKun编程网logo

Postgresql UNION花费的时间是运行单个查询的时间的10倍

12

在本文中,我们将为您详细介绍PostgresqlUNION花费的时间是运行单个查询的时间的10倍的相关知识,此外,我们还会提供一些关于ExcelODBC数据连接查询刷新每个查询所花费的时间、Postg

在本文中,我们将为您详细介绍Postgresql UNION花费的时间是运行单个查询的时间的10倍的相关知识,此外,我们还会提供一些关于Excel ODBC数据连接查询刷新每个查询所花费的时间、Postgresql SQL GROUP BY具有任意精度的时间间隔(低至毫秒)、Postgresql UNION的运行时间是运行单个查询的10倍、postgresql – Postgres hstore的时间序列的有用信息。

本文目录一览:

Postgresql UNION花费的时间是运行单个查询的时间的10倍

Postgresql UNION花费的时间是运行单个查询的时间的10倍

我正在尝试在postgresql中两个几乎相同的表之间进行比较。我正在运行的当前查询是:

SELECT * FROM tableA EXCEPT SELECT * FROM tableB;

SELECT * FROM tableB EXCEPT SELECT * FROM tableA;

上面的每个查询大约需要2分钟才能运行(该表很大)

我想将两个查询结合起来,以期节省时间,因此我尝试了以下操作:

SELECT * FROM tableA EXCEPT SELECT * FROM tableBUNIONSELECT * FROM tableB EXCEPT SELECT * FROM tableA;

尽管运行正常,但需要20分钟才能运行!!!我猜想最多只需要4分钟,即分别运行每个查询的时间。

UNION是否正在做一些额外的工作,从而使它花费了这么长时间?还是有什么办法可以加快速度(有或没有UNION)?

更新:使用UNION ALL运行查询需要15分钟,几乎是单独运行每个查询的4倍,我是否正确地说UNION(全部)根本不会加快运行速度?

答案1

小编典典

关于您的“额外工作”问题。是的。联合不仅将这两个查询组合在一起,而且还会遍历并删除重复项。这与使用不同的语句相同。

因此,特别是与您的except语句结合使用“ union all”可能会更快。

在此处阅读更多信息:http
:
//www.postgresql.org/files/documentation/books/aw_pgsql/node80.html

Excel ODBC数据连接查询刷新每个查询所花费的时间

Excel ODBC数据连接查询刷新每个查询所花费的时间

我正在尝试测试从Excel数据连接运行的查询的三种变体。

我有三个单独的数据连接和三个单独的选项卡,它们分别从每个连接获取数据。

每个查询的连接字符串相同,只有命令文本(Oracle SQL)不同。

Excel中是否可以查看每个查询的执行时间?

我专门使用版本 Excel 2016 MSO 16.0.4456.1003 64bit

Postgresql SQL GROUP BY具有任意精度的时间间隔(低至毫秒)

Postgresql SQL GROUP BY具有任意精度的时间间隔(低至毫秒)

我的测量数据存储在以下结构中:
CREATE TABLE measurements(
measured_at TIMESTAMPTZ,val INTEGER
);

我已经知道使用了

(a)date_trunc(‘hour’,measured_at)

(b)generate_series

我可以通过以下方式汇总我的数据:

microseconds,milliseconds
.
.
.

但是可以将数据汇总5分钟,还是说任意的秒数?是否可以将测量数据聚合任意的秒数?

我需要通过不同时间分辨率汇总的数据将其馈送到FFT或AR模型中,以便查看可能的季节性。

您可以通过添加generate_series()创建的间隔来生成“buckets”表。此sql语句将在数据中生成第一天五分钟存储桶(min(measured_at)的值)表。
select 
  (select min(measured_at)::date from measurements) + ( n    || ' minutes')::interval start_time,(select min(measured_at)::date from measurements) + ((n+5) || ' minutes')::interval end_time
from generate_series(0,(24*60),5) n

将该语句包含在通用表表达式中,您可以将其加入并分组,就像它是基表一样。

with five_min_intervals as (
  select 
    (select min(measured_at)::date from measurements) + ( n    || ' minutes')::interval start_time,(select min(measured_at)::date from measurements) + ((n+5) || ' minutes')::interval end_time
  from generate_series(0,5) n
)
select f.start_time,f.end_time,avg(m.val) avg_val 
from measurements m
right join five_min_intervals f 
        on m.measured_at >= f.start_time and m.measured_at < f.end_time
group by f.start_time,f.end_time
order by f.start_time

分组任意秒数是相似的 – 使用date_trunc()。

更普遍的使用generate_series()可以避免猜测五分钟桶的上限。实际上,您可能会将其构建为视图或函数。您可能会从基表获得更好的性能。

select 
  (select min(measured_at)::date from measurements) + ( n    || ' minutes')::interval start_time,((select max(measured_at)::date - min(measured_at)::date from measurements) + 1)*24*60,5) n;

Postgresql UNION的运行时间是运行单个查询的10倍

Postgresql UNION的运行时间是运行单个查询的10倍

我试图在 postgresql中获得两个几乎相同的表之间的差异.我正在运行的当前查询是:
SELECT * FROM tableA EXCEPT SELECT * FROM tableB;

SELECT * FROM tableB EXCEPT SELECT * FROM tableA;

上述每个查询大约需要2分钟才能运行(它是一个大表)

我希望将这两个查询结合起来以节省时间,所以我试过:

SELECT * FROM tableA EXCEPT SELECT * FROM tableB
UNION
SELECT * FROM tableB EXCEPT SELECT * FROM tableA;

虽然它有效,但需要20分钟才能运行!我猜它最多需要4分钟,单独运行每个查询的时间.

UNION正在做一些额外的工作,这需要花费这么长时间吗?或者有什么方法可以加快速度(有或没有UNION)?

更新:使用UNION ALL运行查询需要15分钟,几乎是自己运行每个查询的4倍,我是否正确地说UNION(全部)根本不会加快速度?

关于你的“额外工作”问题.是. Union不仅结合了两个查询,还通过并删除了重复项.它与使用不同的语句相同.

出于这个原因,特别是与你的except语句结合使用“union all”可能会更快.

在这里阅读更多:
http://www.postgresql.org/files/documentation/books/aw_pgsql/node80.html

postgresql – Postgres hstore的时间序列

postgresql – Postgres hstore的时间序列

我是postgres的新手,正在试验hstore扩展.请寻求一些指导.我需要支持我们销售的各种产品的时间序列数据的基本报告.我为每个产品提供了“Timestamp,Value”格式的大量数据.每个产品的csv文件中都有这些数据.

我正在考虑使用hstore以键值格式存储这些数据.假设单个产品的所有时间序列数据都可以存储在单个hstore对象中.我需要能够按特定时间查询这些数据,比如在给定时间产品的价值是多少?还需要运行简单的查询,例如检索产品成本超过100美元的时间.
我打算有一个包含产品ID列和hstore列的表.但我不清楚如何使这项工作:

> hstore列需要从csv中存在的数千个时间戳记,值记录中加载.每当我们得到一个新的csv时,都应该附加hstore.
>该表需要存储productId和相应的Timeseries数据.
你能告诉我们使用hstore是否有帮助?如果是,那么如何从csv加载数据,如上所述.此外,如果对hstore中的插入/更新的性能有任何影响,随着数据的增长,请分享您的经验.

我认为你应该先从一个简单的规范化模式开始,特别是因为你是Postgresql的新手.就像是:
CREATE TABLE product_data
(
    product TEXT,-- I'm making an assumption about the types of your columns
    time TIMESTAMP,value DOUBLE PRECISION,PRIMARY KEY (product,time);
);

我肯定会记住hstore和类似的选项,如果你的数据变得足够大,效率更重要,更简单.但请注意,所有选项都有效率权衡.

你知道你要支持多少数据吗?产品数量,每种产品的不同时间戳数量?

您还想要运行哪些其他查询?如果产品具有许多不同的时间戳,那么单个产品成本超过100美元的时间的查询将受益于(产品,价值)的索引.

其他选择

如果要在一行中存储一组任意键值对,则hstore最有用.您可以在此处使用它,每个产品都有一行,并且该产品的每个不同时间戳都是产品表中的键.缺点是hstore中的键和值是文本,而键是时间戳,而您的值是某种数字.因此,型式检查会有一定程度的减少,并且所需的铸造成本会有所增加.另一个可能的缺点是,hstore上的某些查询可能不会非常有效地使用索引.上面的表可以使用简单的btree索引进行范围查询(假设您想要提取产品的两个日期之间的值).但是hstore索引更加有限;您可以在hstore列上使用gist或gin索引来查找具有特定键的所有行.

另一个选项(我已经玩过并实验性地用于我的一些数据库)是数组.基本上,每个产品都有一个值数组,每个时间戳都映射到数组中的索引.如果时间戳完全正常,这很容易.例如,如果您的所有产品每天每小时都有一个值,您可以使用如下表格:

CREATE TABLE product_data
(
    product TEXT,day DATE,values DOUBLE PRECISION[],-- An array from 0 to 23.

    PRIMARY KEY (product,day);
);

您可以构建视图和索引,以便轻松查询此表. (我在http://ejrh.wordpress.com/2011/03/20/vector-denormalisation-in-postgresql/写了一篇关于这种技术的博客文章.)

但我的建议仍然是:从一个简单的表开始,然后在你知道自己需要它们时探索提高效率的方法.

今天的关于Postgresql UNION花费的时间是运行单个查询的时间的10倍的分享已经结束,谢谢您的关注,如果想了解更多关于Excel ODBC数据连接查询刷新每个查询所花费的时间、Postgresql SQL GROUP BY具有任意精度的时间间隔(低至毫秒)、Postgresql UNION的运行时间是运行单个查询的10倍、postgresql – Postgres hstore的时间序列的相关知识,请在本站进行查询。

本文标签: