我繼承了一些未優化的 SQL Server 查詢。在這個代碼示例上面有很多事情要做,但這就是 75% 的查詢執行的來源。因為在這些選擇/計數中的每一個中,都會掃描表 1。有沒有辦法一次性掃描表 1 中的所有內容。注意是基于 column3 計算的,但 where 子句中的值來自 column4。這使它比我見過的其他解決方案更棘手。
SELECT
table1.column1,
table1.column2
(SELECT COUNT (DISTINCT table1.column3)
FROM table1
WHERE table1.column4 = 'value') AS 'count of values'
(SELECT COUNT (DISTINCT table1.column3)
FROM table1
WHERE table1.column4 = 'value2') AS 'another count of different values'
FROM
table1
WHERE
table1.column55 IN ('random value')
這種情況又持續了大約 6 次。這意味著SELECT COUNTs比顯示的多約 6 個,但格式相同。
uj5u.com熱心網友回復:
你的代碼被混淆了太多,很難說發生了什么,但我認為這樣的事情應該很接近。它至少只會查詢 table1 一次,而不是一遍遍地查詢。
with MyCounts as
(
select Value1 = count(distinct case when table1.column4 = 'value' then table1.column3 end)
, Value2 = count(distinct case when table1.column4 = 'value2' then table1.column3 end)
from table1
)
select t.*
, c.Value1
, c.Value2
from table1 t
cross join MyCounts c
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/384644.html
標籤:sql sql-server
上一篇:如何在SQL中選擇前幾年的資料?
