在本文中,我们将为您详细介绍PostgresqlUNION花费的时间是运行单个查询的时间的10倍的相关知识,此外,我们还会提供一些关于ExcelODBC数据连接查询刷新每个查询所花费的时间、Postg
在本文中,我们将为您详细介绍Postgresql UNION花费的时间是运行单个查询的时间的10倍的相关知识,此外,我们还会提供一些关于Excel ODBC数据连接查询刷新每个查询所花费的时间、Postgresql SQL GROUP BY具有任意精度的时间间隔(低至毫秒)、Postgresql UNION的运行时间是运行单个查询的10倍、postgresql – Postgres hstore的时间序列的有用信息。
本文目录一览:- Postgresql UNION花费的时间是运行单个查询的时间的10倍
- Excel ODBC数据连接查询刷新每个查询所花费的时间
- Postgresql SQL GROUP BY具有任意精度的时间间隔(低至毫秒)
- Postgresql UNION的运行时间是运行单个查询的10倍
- postgresql – Postgres hstore的时间序列
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数据连接运行的查询的三种变体。
我有三个单独的数据连接和三个单独的选项卡,它们分别从每个连接获取数据。
每个查询的连接字符串相同,只有命令文本(Oracle SQL)不同。
Excel中是否可以查看每个查询的执行时间?
我专门使用版本 Excel 2016 MSO 16.0.4456.1003 64bit
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模型中,以便查看可能的季节性。
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倍
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(全部)根本不会加快速度?
出于这个原因,特别是与你的except语句结合使用“union all”可能会更快.
在这里阅读更多:
http://www.postgresql.org/files/documentation/books/aw_pgsql/node80.html
postgresql – Postgres hstore的时间序列
我正在考虑使用hstore以键值格式存储这些数据.假设单个产品的所有时间序列数据都可以存储在单个hstore对象中.我需要能够按特定时间查询这些数据,比如在给定时间产品的价值是多少?还需要运行简单的查询,例如检索产品成本超过100美元的时间.
我打算有一个包含产品ID列和hstore列的表.但我不清楚如何使这项工作:
> hstore列需要从csv中存在的数千个时间戳记,值记录中加载.每当我们得到一个新的csv时,都应该附加hstore.
>该表需要存储productId和相应的Timeseries数据.
你能告诉我们使用hstore是否有帮助?如果是,那么如何从csv加载数据,如上所述.此外,如果对hstore中的插入/更新的性能有任何影响,随着数据的增长,请分享您的经验.
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的时间序列的相关知识,请在本站进行查询。
本文标签: