PDA

View Full Version : گرفتن select از یک دیتابیس بزرگ



az.heidarzadeh
شنبه 13 خرداد 1391, 10:37 صبح
سلام دوستان عزیز
من یک دیتابیس خیلی بزرگ دارم که میلیونها رکورد میتونه داشته باشه و اینطوریه که 1 جدول اصلی دارم و بقیه جداولم همه یجوری به این رفرنس دارن، حالا فکر کنید من یه select از اطلاعات کامل یک کد میخوام که درواقع میشه یه select از کل دیتابیس که با هم join شدن
حالا به نظر اساتید محترم این select چطور بنویسم که بهترین سرعت و دقت و داشته باشه آخه لازمه یه محاسبه روی همه اون چند میلیون رکورد انجام بشه که برای هر کدومش این select و میخوام تنها راهیم که بلدم join زدنه اما بنظرم عاقلانه نیست کل یه دیتابیس بزرگ و بیام با هم join کنم :لبخند: مگه نه؟...

tiphooo
شنبه 13 خرداد 1391, 17:25 عصر
وقتی SELECT شما با شرط محدود شود و به قول خودتان اگر تمام موجوینهای مربوط به یک رکورد را می خواهید از سایر جدولها واکشی کنید فرقی ندارد از چه چیزی استفاده کنید در هر حالت سرعت خوب است اما اگر می خواهید برای کل رکوردها و در آن واحد این کار را انجام دهید به نظر من راهی بهتر از JOIN وجود ندارد ولی برای سرعت بهتر سعی کنید اسمامی فیلدها را ذکر کنید و از * SELECT استفاده نکنید
ایندکس جدولهایتان بهینه باشد
شرط IS NULL , IS NOT NULL را حتی الامکان در شرایط استفاده نکنید
ولی اگر از SQLServer2008 استفاده می کنید حالات NULL را حتما در نظر بگیرید
و برای آن چاره ای بیندیشید چون قضیه اینجا با SQLServer2000 کاملا متفاوت است
و اگر نگوئیم باگ دارد باید بگویم من مقاله ای درباره این تفاوت تا حالا ندیدم

SReza1
سه شنبه 16 خرداد 1391, 09:14 صبح
خوب به نظر من كار با بانكهاي بزرگ يك سختي‌هايي داره :
1- پردازش روي حجم بالاي ركوردها زمانگير است. مثلا فيلتر روي يك جدول چند ميليون ركوردي
2- با فرض اينكه پردازش زيادي انجام نشده و فقط اطلاعات خام بايستي انتقال شه عملا زمان زيادي براي انتقال حجم بالاي اطلاعات از سرور به client وجود داره كه بسيار از حالت اول زمانگير تره.

راه حلهاي پيشنهادي براي حالت يك :
1- استفاده از file group و file stream
2- tuneكردن بانك مثل indexسازي مجدد و بهينه
و ...

براي دوم راه خاصي وجود ندارد ولي ميشه با page pageكردن صفحات (مثل google) [چون كاربر كه نميتونه ايت همه result رو يكباره ببينه!! ]و يا خواندن با استفاده از thread و البته نقويت بستر شبكه يك كارايي كرد.

baktash.n81@gmail.com
سه شنبه 16 خرداد 1391, 17:55 عصر
سلام

خیلی بستگی به نوع جداول و ارتباطط بین آنها داره ... ولی در صورت امکان اگه بتونی اول اطلاعات رو فیلتر کنی بعد Join و محاسبات رو انجام بدی خیلی بهتره ... در هر صورت چیزی جایگزین Join اطلاعات نمی شه که از اون سریعتر عمل کنه ... پس باید از Join استفاده کنی ولی همونطور که گفتم اگه می تونی اول اطلاعات رو فیلتر کن که به مجموعه رکورد ها برسی بعد عمل Join رو انجام بده ...