我有3個表:如何避免大in子句?
table_product (30 000 row)
---------
ID
label
_
table_period (225 000 row)
---------
ID
date_start
date_end
default_price
FK_ID_product
和
所以我需要從這些表中加載數據,所以這裏是我做的: 1 /來自「table_product」的加載數據像這樣
從 「table_period」 像32102 /加載數據這
select *
from table_period
where FK_ID_product IN(list of all the ids selected in the 1)
從 「table_special_offer」
3 /加載數據這樣
select *
from table_special_offer
where FK_ID_period IN(list of all the ids selected in the 2)
你可能想IN子句中的點3可以非常非常大(比如75000個大),所以我有很多機會獲得暫停或類似「已達到表達式服務限制」。
你有沒有這樣的事情,你是如何設法避免它?
PS: 背景:SQL Server 2005中,.NET 2.0 (請不要告訴我,我的設計是壞的,或者我不應該做「SELECT *」,我只是簡化了我的問題,所以它是一個比描述我的業務的500頁簡單一點)。
謝謝。
不會真的有所幫助。 – gbn 2010-11-23 10:24:05
這將是一個解決方案,也許存在而不是在(se @atathedev鏈接)。但這裏的問題是這個解決方案會很有效率,如果我有很多產品/期間,如果我只選擇幾個,我最好做一個明確的。 – 2010-11-23 10:25:40
@gbn謹慎解釋? – 2010-11-23 10:25:44