小编Hen*_*ski的帖子

如何使用窗口函数优化SQL查询

这个问题是有关一个.我有一个包含设备功率值的表,我需要计算给定时间跨度的功耗并返回10个最耗电的设备.我已生成192个设备和7742208个测量记录(每个40324).这大约是一个月内设备会产生多少记录.

对于这个数据量,我当前的查询需要40多秒来执行,这太多了,因为时间跨度和设备和测量的数量可能要高得多.我是否应该尝试使用不同于滞后的方法来解决这个问题()OVER PARTITION以及可以进行哪些其他优化?我非常感谢有关代码示例的建议.

PostgreSQL版本9.4

使用示例值查询:

SELECT
  t.device_id,
  sum(len_y*(extract(epoch from len_x))) AS total_consumption
FROM (
    SELECT
      m.id,
      m.device_id,
      m.power_total,
      m.created_at,
      m.power_total+lag(m.power_total) OVER (
        PARTITION BY device_id
        ORDER BY m.created_at
      ) AS len_y,
      m.created_at-lag(m.created_at) OVER (
        PARTITION BY device_id
        ORDER BY m.created_at
      ) AS len_x
    FROM
      measurements AS m
  WHERE m.created_at BETWEEN '2015-07-30 13:05:24.403552+00'::timestamp
    AND '2015-08-27 12:34:59.826837+00'::timestamp
) AS t
GROUP BY t.device_id
ORDER BY total_consumption
DESC LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

表信息:

    Column    |           Type           |                         Modifiers
--------------+--------------------------+----------------------------------------------------------
 id           | integer                  | …
Run Code Online (Sandbox Code Playgroud)

sql postgresql optimization query-optimization

6
推荐指数
1
解决办法
544
查看次数

如何独立获取docker0 ip地址平台

我正在构建需要拥有docker0的ip地址的应用程序而不使用像ip addr show dev docker0.有没有办法从docker本身获得它可能使用docker命令或其他东西?至少docker info似乎没有表现出来.

docker

3
推荐指数
2
解决办法
1990
查看次数