0

以下のSQLクエリを最適化するタスクを与えました。現在、クエリがタイムアウトしており、多くのブロッキングが発生しています。t-sql を使い始めたばかりなので、クエリの最適化を手伝ってください。

select ExcludedID 
from OfferConditions with (NoLock) 
where OfferID = 27251 
  and ExcludedID in (210,223,409,423,447,480,633,...lots and lots of these...,
  13346,13362,13380,13396,13407,1,2) 

union 

select CustomerGroupID as ExcludedID 
from CPE_IncentiveCustomerGroups ICG with (NoLock) 
inner join CPE_RewardOptions RO with (NoLock) 
on RO.RewardOptionID = ICG.RewardOptionID 
where RO.IncentiveID = 27251 
  AND ICG.Deleted = 0 and RO.Deleted = 0 and 
  and ExcludedUsers = 1 
  and CustomerGroupID in (210,223,409,423,447,480,633,...lots and lots of these...,
  13346,13362,13380,13396,13407,1,2);
4

2 に答える 2

1

IN ステートメントを使用する代わりに、これらの ID を一時テーブルに挿入して結合することができます。

于 2013-09-28T04:14:18.320 に答える
0

問題を解決する鍵は、SQL を修正することではなく、テーブルのインデックスを修正することです。たとえば、OfferID と ExcludedID を使用して、OfferConditions テーブルに複合インデックスを作成する必要があります。

他のテーブルにインデックスを作成するときは、フィールドが where OR 結合フィルターにある場合、それは複合インデックスの一部である必要があることに注意してください。

于 2013-09-27T22:17:44.247 に答える