PDA

View Full Version : افزایش سرعت Select در دیتابیس بزرگ



pi_plusplus
یک شنبه 21 مرداد 1386, 06:51 صبح
با سلام و خسته نباشید. من یه دیتا بیس دارم که حدود 160000 رکورد داره، وقتی می خوام توی برنامه VB نتیجه یه Select رو نشون بده اونقدر سرعتش کنده که پیغام TimeOut میده و من عملا" نمی تونم Query رو تا آخر اجرا کنم. برای افزایش سرعت Select باید چکار کنم؟
بانک من یه کلید اصلی داره و برای هر کدوم از فیلدهای شرط Select هم یه Index تعریف کردم.
یه کم فوریه، منتظر جوابتون هستم. ممنون.

AminSobati
یک شنبه 21 مرداد 1386, 07:55 صبح
دوست عزیزم لطفا Query رو عینا پست کنین

pi_plusplus
یک شنبه 21 مرداد 1386, 08:26 صبح
بانک اطلاعاتی من حدود 60 فیلد داره Mostly Read می باشد. ایندکس هم از 16 فیلد بیشتر قابل ساخته شدن نیست.
من تو برنامه ام امکان انتخاب مجموعه ای از شرایط دلخواه برای حدود 30 فیلد اساسی رو قرار دادم که با هم And میشن. و چون در هنگام کامپایل نمی دونم کاربر کدوم شرطها رو اعمال میکنه مجبورم تمامی اون 30 فیلد رو توی شرطم بیارم. (برای اونایی که کاربر انتخاب نکرده شرط همیشه درست گذاشتم.)
این جستجوی پارامتری گسترده برای چند هزار رکورد خوب جواب میده اما بالای 100 هزارو نمی دونم باید چیکارش کنم؟

ب- تات
یک شنبه 21 مرداد 1386, 09:51 صبح
فکر کنم حالا موقشه که بانکتون رو بشکنین به چند تا Table که با هم Master Detail بشن اونوقت میشه Index ها رو راحت مدیریت کرد .

AminSobati
یک شنبه 21 مرداد 1386, 12:14 عصر
بانک اطلاعاتی من حدود 60 فیلد داره Mostly Read می باشد. ایندکس هم از 16 فیلد بیشتر قابل ساخته شدن نیست.
من تو برنامه ام امکان انتخاب مجموعه ای از شرایط دلخواه برای حدود 30 فیلد اساسی رو قرار دادم که با هم And میشن. و چون در هنگام کامپایل نمی دونم کاربر کدوم شرطها رو اعمال میکنه مجبورم تمامی اون 30 فیلد رو توی شرطم بیارم. (برای اونایی که کاربر انتخاب نکرده شرط همیشه درست گذاشتم.)
این جستجوی پارامتری گسترده برای چند هزار رکورد خوب جواب میده اما بالای 100 هزارو نمی دونم باید چیکارش کنم؟

http://www.sommarskog.se/dyn-search.html
باید برای حالتهایی که بیشتر ممکنه کاربر Query بگیره، Index یا Indexed View بسازین

پویا
یک شنبه 21 مرداد 1386, 14:15 عصر
ممکنه مشکل فقط تو طرز نوشتن دستور باشه
عینا دستور رو اینجا بذارین

Saeed.Elmi
دوشنبه 22 مرداد 1386, 12:33 عصر
سلام
پیشنهاد می کنم لینکی که جناب آقای ثباتی براتون گذاشتن رو کامل و دقیق مطالعه کنید چون فوق العاده هست.

pi_plusplus
سه شنبه 23 مرداد 1386, 14:48 عصر
سلام. من جدولمو به دو تا جدول شکستم اما هنوزم توی جدول اصلیم حدود 30 تا فیلد دارم. برای تک تک فیلدهای اصلی ایندکس گذاشتم و فیلدهای NVarChar رو تا اونجا که ممکن بود به VarChar تیدیل کردم.
سرعت جستجو از 30 ثانیه به 5 تا 8 ثانیه کاهش پیدا کرد.
اما هنوزم می خوام کمتر بشه. مشکل بزرگی که من دارم اینه که می خوام تعیین شرط جستجو دست کاربر باشه و Select خودمو در واقع در "زمان اجرا" و از طریق انتخاب فیلدهای جدول توسط کاربر می سازم و اجرا می کنم که معمولا حداقل 12 فیلد با هم در شرط جستجو می آیند.
نکته دیگه اینکه برای هر کدام از فیلدها شرط محدوده ای اعمال کردم یعنی با Beetween کاربر محدوده مورد نظرشو تعیین می کنه.
برای بهینه کردن همچین Select ی راهی به ذهنتون نمی رسه؟