PDA

View Full Version : چطور میشه سرعت کوئری هام رو بالا ببرم به طرز فجیع



oliya24
شنبه 18 شهریور 1391, 17:37 عصر
سلام و خسته نباشید
دستان یه تیبل دارم که در حدود 2 میلیون رکورد اطلاعات داره و وقتی که میخوام ازش select * بگیرم حدود 14 ثانیه طول میکشه تا کاملا کوئریم اجرا شه و رکوردها رو به من نمایش بده خوب گذشته از ایندکسها که من دو ایندکس دارم یه خوشه ای و یه غیر خوشه ای
میخوام کاری کنم که این 14 ثانیه به حداقل برسه نمیدونم باید چه کنم از دوستانی که این کار رو انجام دادن و متوجه هستن من چی میخوام تقاضا دارم من رو یاری کنید
با تشکر

baktash.n81@gmail.com
یک شنبه 19 شهریور 1391, 07:51 صبح
سلام ...

خوب ... شما وقتی داری Select * رو اجرا می کنی حجم زیادی از اطلاعات رو واکشی می کنی و این زمانبر هست ... فقط اسم فیلدهایی رو که میخوای جلوی Select بنویس ... و با شرط میزان رکوردهایی رو که واکشی می شه کم کن ... اگه شرط رو روی همون فیلدهایی که ایندکس داری بزاری سرعتت بهتر می شه ...

oliya24
یک شنبه 19 شهریور 1391, 13:34 عصر
بله دوست عزیز حرف شما درست من این رو میدونستم اما در معدود مواردی پیش میاد که کاربران نیاز دارن که کل تیبل رو ببینن که این امر باعثدردسر میشه حالا فرض کنید که این تیبل مال یه برنامه ویندوز اپ باشه
و تحت شبکه اگر همزمان مثلا 3 یا 4 کاربر بخوان این تیبل رو ببینن چی میشه فاجعه میشه.... من میخوام از این کار جلوگیری کنم ولی هنوز به راهی نرسیدم ممنون میشم من رو برای کاهش وقت در زمان select *
راهنمایی کنید
با تشکر از همکاری شما دوست عزیز

pashna
یک شنبه 19 شهریور 1391, 21:30 عصر
دوست من سلام،
شما اگر فرض کنی‌ که ۳-۴ تا کاربر هم همزمان بخوان از این جدول گزیدن بزنن هیچ فاجعه ا‌ی‌ نمی‌شه، فقط باید از WITH(NOLOCK) استفاده کنی‌ و تنها اتفاقی‌ که میافته اینه که User باید ۱۴ ثانیه صبر کنه تا کل اطلاعات تو Fetch کنه، البته می‌تونی از OPTION هم استفاد اکنی که شاید ۱ کم بهتره باشه،مثلا :
SELECT Col1, Col2 FROM Table

OPTION(FAST 10)
با این کار ۱۰ رکورد اول رو که Fetch کنه نشون میده ولی‌ همچنان کار می‌کنه تا بقیهٔ رکورد هارو Fetch کنه.
ولی‌ همون طور که قبلان بهت گفتم اینها راه حل اساسی‌ نیست، شما ۲ راه بیشتر نداری، و یون‌ها هم Cache کردن هستند، حالا یا باید از SQL بخوای بست کچ کنه که Parametrization استفاده کنی‌، و یا اگر مثلا لایی‌ ا‌ی‌ به نامه بیزینس داری باید اونجا به کمک .NET cache کنی‌.