簡體   English   中英

改進 SQL 查詢運行時

[英]Improve SQL Query Runtime

SQL 的新手。我正在嘗試獲取一些每周的趨勢來比較各種指標點。 這是我到目前為止所擁有的。 運行時很糟糕,因為它遍歷整個表 4 次,而且這只是過去 4 周的情況。 有沒有什么方法可以改進這個過程並獲得過去幾周(不僅僅是過去 4 周)的指標?

編輯:這是 MySQL。

樣本數據:

時間戳 指標命中 公制合計 指標值
2022-09-20 06:50:01.332000 4個 4個 1個
2022-08-31 08:49:59.086000 2個 3個 0.6666
2022-08-09 04:50:12.430000 1個 2個 0.5
SELECT
    sum(metric_hits) as metric_hits_sum,
    sum(metric_total) as metrics_total_sum,
    avg(metric_value) as metric_value_avg
from metric_events
where timestamp >= DATEADD(DAY, -7-DATEPART(WEEKDAY, GETDATE()::date), GETDATE()::date) and timestamp < DATEADD(DAY, -DATEPART(WEEKDAY, GETDATE()::date), GETDATE()::date)
UNION
SELECT
    sum(metric_hits) as metric_hits_sum,
    sum(metric_total) as metrics_total_sum,
    avg(metric_value) as metric_value_avg
from metric_events
where timestamp >= DATEADD(DAY, -14-DATEPART(WEEKDAY, GETDATE()::date), GETDATE()::date) and timestamp < DATEADD(DAY, -7-DATEPART(WEEKDAY, GETDATE()::date), GETDATE()::date)
UNION
SELECT
    sum(metric_hits) as metric_hits_sum,
    sum(metric_total) as metrics_total_sum,
    avg(metric_value) as metric_value_avg
from metric_events
where timestamp >= DATEADD(DAY, -21-DATEPART(WEEKDAY, GETDATE()::date), GETDATE()::date) and timestamp < DATEADD(DAY, -14-DATEPART(WEEKDAY, GETDATE()::date), GETDATE()::date)
UNION
SELECT
    sum(metric_hits) as metric_hits_sum,
    sum(metric_total) as metrics_total_sum,
    avg(metric_value) as metric_value_avg
from metric_events
where timestamp >= DATEADD(DAY, -28-DATEPART(WEEKDAY, GETDATE()::date), GETDATE()::date) and timestamp < DATEADD(DAY, -21-DATEPART(WEEKDAY, GETDATE()::date), GETDATE()::date)

這應該讓你更接近。 我會讓你添加更多功能(比如一周的開始和結束日期)

select floor((daysold - DATEPART(WEEKDAY, GETDATE()::date)) / 7) as weeksold
, sum(metric_hits) as metric_hits_sum
, sum(metric_total) as metrics_total_sum
, avg(metric_value) as metric_value_avg
from (
  SELECT datediff(day, [timestamp], GETDATE()::date) as daysold
  , metric_hits
  , metric_total
  , metric_value
  from metric_events
  where [timestamp] < DATEADD(DAY, -DATEPART(WEEKDAY, GETDATE()::date), GETDATE()::date)
) q
group by floor((daysold - DATEPART(WEEKDAY, GETDATE()::date)) / 7)
order by 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM