簡體   English   中英

如何在SQL Server 2008中加快聯接和求和產品查詢?

[英]How to speed up a join and sum product query in SQL Server 2008?

我有兩個表A和B。A具有浮點變量X1,X2,X3,...,X9,sumprod和14,000行。 B具有浮點變量X1,X2,X3,...,X9,文本變量“ Model”,其值例如為“ Model 1”,“ Model 2”等,並有50行。
我正在嘗試加入並使用以下代碼執行sumproduct操作:

Update A set a.sumprod = a.X1*b.X1 + a.X2*b.X2 + ... + a.X9*b.X9
from a left join b
on b.Model = 'Model 2';

我有多個這樣的查詢,這些查詢具有不同的表(如A),並且表B中的Model變量具有相應的不同連接條件。我已經確定這些查詢在我的存儲過程中花費了最長的時間,並且正在尋找一種使它們更快的方法。

我嘗試了如下所示的此查詢的變體,但在運行時沒有任何實質性更改:

變體1:

Update A
set a.sumprod = a.X1*b.X1 + a.X2*b.X2 + ... + a.X9*b.X9
from a left join b
on 1 = 1
where b.Model = 'Model 2';

變體2:

merge A
using (select X1, X2, ..., X9 from B where Model = 'Model 2') C
on 1 = 1
when matched then update
set sumprod = a.X1*c.X1 + a.X2*c.X2 + ... + a.X9*c.X9;

編輯更清晰:

有多個表A:A1,A2,A3,...每個表A#包含模型(與表B中的型號對應)的解釋變量(X1,X2等)。

因此表A1可能是:

X1 | X2 | X3 | X4 | 桑普羅德

6 | 7 | 3 | 5 |

5 | 3 | 4 | 4 |

...

表A2將具有不同數量的解釋變量,並且解釋變量本身也將不同。 此外,行數將與A1不同。

表B具有每個模型的模型系數,如下所示:

型號| X1 | X2 | X3 | X4 | X5 | X6 | X7 | X8 | X9

模型1 | 3 | 2 | 5 | 9 | 0 | 0 | 0 | 0 | 0

模型2 4 | 7 | 8 | 3 | 5 | 8 | 0 | 0 | 0

...

模型1有四個解釋變量,因此表B中的模型1行的X5列以后的系數為零。

我要在每個表A的sumprod列中執行的操作是取解釋性變量與表B中正確行的系數的和積。表A與系數表B之間沒有通用的行標識符。正在取A1中每個行與B中單個行的總和。

連接之后,我希望表A1的sumprod列如下所示:

X1 | X2 | X3 | X4 | 桑普羅德

1 | 7 | 3 | 5 | 6 * 3 + 7 * 2 + 3 * 5 + 5 * 9 = 92

5 | 3 | 4 | 4 | 5 * 3 + 3 * 2 + 4 * 5 + 4 * 9 = 77

...

解釋變量的值是固定的,但是模型系數的值是用戶輸入的,並且預計會經常更改。

從最初的評論看,這似乎不是我想要執行的操作的良好數據庫結構。 有什么建議可以使我更快嗎?

FROM a LEFT JOIN b ON b.Model = 'Model 2'嗎? 我不知道您期望從此聯接中獲得什么行為,並且我懷疑查詢引擎同樣令人困惑。 您是否真的想要CROSS JOIN 您應該只說CROSS JOIN

這就是我要做的:

UPDATE a
SET a.sumprod = a.X1 * b1.X1 + a.X2 * b1.X2 +...+ a.X9 * b1.X9
FROM a
CROSS JOIN (
    SELECT Model, X1, X2, ..., X9 FROM b where Model = 'Model 2'
    ) b1
WHERE a.sumprod <> a.X1 * b1.X1 + a.X2 * b1.X2 +...+ a.X9 * b1.X9
    OR a.sumprod is NULL;

您是否有理由要CROSS JOIN ab之間確實沒有關系嗎? 這似乎是一個設計問題。 您想使a.sumprod中的所有 a.sumprod成為b一行中的內容的函數? 您是否打算反復更改? 您太抽象了,無法告訴您要完成的工作。

就個人而言,我會創建一個VIEW返回的必要的乘積,而不是在更新領域a作為存儲聚集是一個普遍較差的想法,但如果你已經有性能問題,可能並不明智。

暫無
暫無

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

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