我有大約80列的表「BigTable」,但我需要生成一個「Rank」列,我將在更新期間使用它。截至目前,我的查詢看起來像這樣。連接表中的列數是否影響性能
UPDATE bt
SET bt.UpdateColumn = CASE WHEN (SomeCondition >= bt.RankField)
THEN bt.UpdateColumn + 0.01
ELSE bt.UpdateColumn
END
FROM (SELECT bt.*,RANK() OVER (PARTITION BY Col1 ORDER BY Col2) AS RankField FROM BigTable bt) bt
INNER JOIN AnotherTable atbl
ON bt.Col1 = atbl.Col2
請問,如果我我的代碼更改一些像這樣的事情是更好。派生表中的列數是否在連接期間很重要。
UPDATE bt
SET bt.UpdateColumn = CASE WHEN (SomeCondition >= bt.RankField)
THEN bt.UpdateColumn + 0.01
ELSE bt.UpdateColumn
END
FROM (SELECT bt.Col1,RANK() OVER (PARTITION BY Col1 ORDER BY Col2) AS RankField FROM BigTable bt) bt
INNER JOIN AnotherTable atbl
ON bt.Col1 = atbl.Col2
如果您擔心性能問題,然後測試添加索引是否有幫助。加入索引字段將顯着改善性能。增加你加入的表的數量將不可避免地減慢結果檢索 - 這就是爲什麼i.m.o.我們需要始終優化我們的連接和表索引。 –