Sta*_*eff 5 postgresql performance group-by postgresql-performance
我有一个包含三个表的数据库items
,parameters
并且measurements
在两个服务器中都想查询该measuerment
表。但是在 PostgeSQL (9.4) 和 SQL Server (2012) 中查询要慢得多。
measurements
:
column | type | attributes
---------------+----------------------+-----------------------------------------------------------
id | int/serial | (identity) primary key
measuretime | datetime/timestamp | not null
parameter_id | int | not null (foreign key) references parameters(id)
item_id | int | not null (foreign key) references items(id)
value | float | not null
Run Code Online (Sandbox Code Playgroud)
和两个nonclustered index
上measuretime
和parameter_id
我插入了 2.609.280 行items
(半年,每行间隔 5 秒)和 31.311.360 行measurements
(每个项目有 12 个参数)。
当我现在尝试查询每个参数每天的平均值时,它在 SQL Server (00:00:02) 上表现得非常好,但在 PostgreSQL (00:00:53) 上表现很差。
SQL Server 查询:
select parameter_id, convert(date, measuretime), avg(value)
from measurements
group by parameter_id, convert(date, measuretime)
Run Code Online (Sandbox Code Playgroud)
PostgreSQL 查询:
select parameter_id, date(measuretime), avg("value")
from measurements
group by parameter_id, date(measuretime)
Run Code Online (Sandbox Code Playgroud)
我能做些什么吗?创建索引?一些服务器设置?更改查询?
在 PostgreSQL 9.6 中,日期构造函数已修复。
提高时间戳、时间和日期数据类型的输出函数的速度(David Rowley、Andres Freund)
您可以在此处查看此内容的提交盛宴。大约快了 20 倍。此外9.6还支持并行顺序扫描。因此,在单核上这可能会快 20 倍。而且,整个扫描可能能够使用系统上的所有核心。
归档时间: |
|
查看次数: |
1556 次 |
最近记录: |