PDA

View Full Version : سوال: چرا عملگر in هنگامی که مجموعی ی آن طولانی میشود بسیار کند پاسخ را بر میگرداند؟



pernia
یک شنبه 29 مرداد 1391, 09:02 صبح
سلام
دستور SQL را که در Access اجرا کردم ببینید:

Select * from Table1 where id in
(
select T1_ID from Table2
)

اگر مجموعه ای که Subquery درون in برمیگرداند از 10000 رکورد بیشتر باشد زمان بسیار زیادی در حد 10 ثانیه تلف میشود

پیشنهاد شما برای حل این مشکل چیست که زمان کمتری مصرف کند؟

Abbas Amiri
یک شنبه 29 مرداد 1391, 09:23 صبح
از روش زیر استفاده کنید


SELECT Field1, Field2, Field3
FROM Table1
INNER JOIN Table2 ON Table1.Field1 = Table2.Field1
GROUP BY Field1, Field2, Field3

pernia
یک شنبه 29 مرداد 1391, 18:58 عصر
ضمن تشکر از توجه شما
راه حل شما بسیار مفید بود و جالب
حالا توی تبدیل اصل دستور به سبک شما دچار مشکل شدم

دستوری که من در برنامه زیاد اسستفاده می کنم اینه:

Select distinct Fit_R_id from Wels
where Fit_R_id is not null
and
id not in
(
select Wels_id from Fit
)


که مقداری که برمیگردونه با نتیجه حاصل از دستورات زیر برار نیست



Select distinct Fit_R_id from Wels
inner JOIN Fit ON wels.id = fit.wels_id

where
wels.fit_R_id is not null

GROUP BY wels.fit_R_id


ممکنه راهنمایی کنید اشکال کارم کجاست و چه تغیراتی باید بدم؟
از left و right هم استفاده کردم موفق نشدم

Abbas Amiri
یک شنبه 29 مرداد 1391, 20:33 عصر
سوال شما دقیقا عکس مورد جاری بود و متاسفانه با آن روش فقط مشترکات استخراج میشود.
دستور دیگری که مشابه مورد فوق را انجام میدهد مینویسم ولی احتمالا سرعت آن فرق نخواهد کرد.


SELECT Table1.Field1, Table1.Field2, Table1.Field3
From Table1
WHERE DCount("Field1","Table2","Field1=" & [Field1])=0

pernia
یک شنبه 29 مرداد 1391, 23:20 عصر
بله حق با شماست
از اونجا که امکان شاخص گزاری در اکسس ندارم مجبورم یه جوری ببندمش...
سعی میکنم کد را اصلاح کنم
اما از توجه شما سپاسگزارم... و اگر راهی پیدا کردید بنده مبتدی را در جریان بگزارید