如何重寫這個T-SQL代碼產生相同的結果重寫T-SQL按位邏輯
SELECT ACC.Title,
ACC.AdvertiserHierarchyId,
1 AS Counter
FROM admanAdvertiserHierarchy_tbl ACC
JOIN dbo.admanAdvertiserObjectType_tbl AOT ON AOT.AdvertiserObjectTypeId = ACC.AdvertiserObjectTypeId
WHERE (EXISTS
(SELECT 1
FROM dbo.admanAdvertiserHierarchy_tbl CAMP
JOIN dbo.admanAdvertiserAdGroup_tbl AG ON CAMP.AdvertiserHierarchyId = AG.AdvertiserHierarchyId
JOIN dbo.admanAdvertiserCreative_tbl AC ON AC.AdvertiserAdGroupId = AG.AdvertiserAdGroupId
AND CAMP.ParentAdvertiserHierarchyId = ACC.AdvertiserHierarchyId
WHERE CAMP.ERROR = 0
AND AC.Dirty & 7 > 0
AND AC.ERROR = 0
AND AG.ERROR = 0))
其阻止優化器有效地利用索引。 努力達到以下效果
Title AdvertiserHierarchyId Counter
[email protected] 15908 1
[email protected] 37887 1
[email protected] 37383 1
[email protected] 27006 1
011 10526 1
013 10528 1
033 12013 1
062 17380 1
076 20505 1
這是骯髒的TINYINT列
Dirty total
0 36340607
1 117569
2 873553
3 59
鏈接到一個靜態的原因表
DirtyReasonId Title
0 Nothing
1 Overnight Engine
2 End To End
3 Overnight And End To End
4 Pause Resume
5 Overnight Engine and Paused
6 Overnight Engine E2E and Paused
7 All Three
是@DirtyReason聲明爲BIT?你能否展示一個非常簡短的數據樣本和期望的結果? (這看起來很熟悉:-)) –
存在多少個標記,'Dirty'的數據類型是什麼? –
@aaron的確是它!我正在測試一些重寫的存儲過程並沒有得到想要的結果,我想我誤解了按位執行的邏輯 –