Ich habe 3 Tabellen:Wie vermeidet man eine große in-Klausel?
table_product (30 000 row)
---------
ID
label
_
table_period (225 000 row)
---------
ID
date_start
date_end
default_price
FK_ID_product
und
table_special_offer (10 000 row)
-----
ID
label
date_start,
date_end,
special_offer_price
FK_ID_period
Also muss ich Daten aus all diesen Tisch laden, also hier ist es, was ich tue: 1/Daten von "table_product" wie folgt laden
select *
from table_product
where label like 'gun%'
2/Lastdaten von "table_period" wie folgt
select *
from table_period
where FK_ID_product IN(list of all the ids selected in the 1)
3/Lastdaten von "table_special_offer" wie diese
select *
from table_special_offer
where FK_ID_period IN(list of all the ids selected in the 2)
Wie Sie die IN-Klausel in dem Punkt, vielleicht denken, 3 kann sei sehr sehr groß (wie 75 000 groß), also hatte ich eine große Chance, entweder ein Timeout zu bekommen oder so etwas wie "Ein Ausdruck-Service-Limit wurde erreicht".
Hatten Sie jemals so etwas und wie haben Sie es geschafft, es zu vermeiden?
PS: der Kontext: SQL Server 2005, .NET 2.0 (Bitte sagen Sie mir nicht meine Absicht ist schlecht, oder sollte ich „select *“ nicht, ich mein Problem nur vereinfacht, so es sich um eine etwas einfacher als 500 Seiten, die mein Geschäft beschreiben).
Danke.
Wird nicht wirklich helfen. – gbn
das wäre eine Lösung, vielleicht mit einem existiert statt in (se @atathedev link). aber das Problem hier ist diese Lösung wäre effizient, wenn ich eine Menge Produkt/Zeitraum habe, wenn ich nur ein paar wenige wählen, mache ich besser eine explizite in. –
@gbn Care zu erklären? –