我有一張大表(現在大約有8.5億行),並且需要在插入新數據時每週計算百分位數值,靜態數據會變得很髒。但是,該過程非常慢(使用我的硬件/當前查詢5-6小時)。SQL百分比計算運行速度非常緩慢 - 需要幫助加快速度
如何更改我的查詢以加快查詢速度?
現在,我的查詢基本上是這樣的:
SELECT DISTINCT [ident1]
,[ident2]
,[ident3]
,[ident4]
,percentile_cont(0.05)
WITHIN GROUP (
ORDER BY [value] ASC
) OVER (
PARTITION BY [ident1]
,[ident2]
,[ident3]
,[ident4]
) AS [percentile_5]
,percentile_cont(0.10)
WITHIN GROUP (
ORDER BY [value] ASC
) OVER (
PARTITION BY [ident1]
,[ident2]
,[ident3]
,[ident4]
) AS [percentile_10]
,percentile_cont(0.25)
WITHIN GROUP (
ORDER BY [value] ASC
) OVER (
PARTITION BY [ident1]
,[ident2]
,[ident3]
,[ident4]
) AS [percentile_25]
,percentile_cont(0.50)
WITHIN GROUP (
ORDER BY [value] ASC
) OVER (
PARTITION BY [ident1]
,[ident2]
,[ident3]
,[ident4]
) AS [percentile_50]
,percentile_cont(0.75)
WITHIN GROUP (
ORDER BY [value] ASC
) OVER (
PARTITION BY [ident1]
,[ident2]
,[ident3]
,[ident4]
) AS [percentile_75]
,percentile_cont(0.90)
WITHIN GROUP (
ORDER BY [value] ASC
) OVER (
PARTITION BY [ident1]
,[ident2]
,[ident3]
,[ident4]
) AS [percentile_90]
,percentile_cont(0.95)
WITHIN GROUP (
ORDER BY [value] ASC
) OVER (
PARTITION BY [ident1]
,[ident2]
,[ident3]
,[ident4]
) AS [percentile_95]
FROM dataTable
我認爲這個問題的一部分是用出來的DISTINCT
選擇我得到一個排在DB的每個值。 SQL是否足夠聰明,可以爲每個組計算一次百分位數?或者是爲每個值重複計算?
任何幫助將不勝感激。
您需要百分數_ **續**還是可以使用百分數_ **光盤**? – dnoeth
執行計劃告訴你關於這個查詢的內容是什麼? (首先看看應該是一個執行計劃。)例如,它可能會識別缺少的索引。 –
我正在努力獲取執行計劃。我的DBA此時禁用了該功能。同時,什麼是索引這個最好的方法? [ident1],[ident2],[ident3],[ident4]和[value]上的聚簇索引或者也許是列的一些子集? – hoytdj