View Full Version : سوال: آیا اینها از لحاظ کارایی با هم تفاوت دارن؟
علیرضا حسن زاده
پنج شنبه 09 اردیبهشت 1389, 13:05 عصر
سلام
وقتی یه کوئری یا sp رو با یک یا چند پارامتر ورودی فراخوانی می کنیم با فرض اینکه از عملگر Like استفاده نکنیم تمام سطرهایی که برگشت داده میشن حاوی ستون هایی هستن که مقدار یا مقادیر مورد جستجوی شامل اونها میشه
حالا سوال من اینه که وقتی مثلا یه ID (در بعضی شرایط بر اساس چند ستون) رو به sp میدیم که سطرهای حاوی اون Id رو برگردونه اگه تو دستور SELECT این ستون ها رو که خودمون مقادیرش رو دادیم و مقدارشون رو میدونیم رو نیاریم سرعت اجرا فرق میکنه یا نه؟
مثلا اگه یه جدول به صورت (کدجنس،کدمشتری،تاریخ)
و منطور از اجرای یه کوئری بدست آوردن تاریخ خریدهای مشتری باشه جستجو بر اساس کد جنس و مشتری وبرگر فقط ستون تاریخ میتونه بهینه تر باشه و سرعت رو افزایش بده؟
خلاصه اینکه کاهش تعداد ستونهای برگشتی از یه جدول میتونه موجب افزایش کارایی بشه؟:متفکر::لبخندساده:
AminSobati
شنبه 11 اردیبهشت 1389, 00:19 صبح
سلام دوست عزیز،
هر چی شرط کوئری شما تعدادش بیشتر باشه به معنی این هست که ریزش رکورد بیشتر خواهد بود و داشتن ایندکس مناسب میتونه کوئری رو سریعتر کنه. البته بعضی از شرطها (مثلا OR در بعضی حالتها) این خاصیت رو ندارند و همیشه Table Scan رو تحمیل میکنند. من این حالت رو استثنا میکنم از توضیحم
علیرضا حسن زاده
شنبه 11 اردیبهشت 1389, 07:54 صبح
سلام دوست عزیز،
هر چی شرط کوئری شما تعدادش بیشتر باشه به معنی این هست که ریزش رکورد بیشتر خواهد بود و داشتن ایندکس مناسب میتونه کوئری رو سریعتر کنه. البته بعضی از شرطها (مثلا OR در بعضی حالتها) این خاصیت رو ندارند و همیشه Table Scan رو تحمیل میکنند. من این حالت رو استثنا میکنم از توضیحم
با تشکر از پاسخ شما. ولی سوال من درمورد محدود کردن تعداد ستون های برگشت داده شده است یعنی اگه محدود بشه بهتره یانه (از لحاظ کارایی)؟
حسین شهریاری
شنبه 11 اردیبهشت 1389, 10:19 صبح
هر چی شرط کوئری شما تعدادش بیشتر باشه به معنی این هست که ریزش رکورد بیشتر خواهد بود و داشتن ایندکس مناسب میتونه کوئری رو سریعتر کنه
سلام
با اجازه آقای ثباتی!
دوست عزیز جناب ALIREZA_1363 همونطور که جناب ثباتی فرمودند،بله هرچه شما شرطهای جلوی Where را افزایش دهید ریزش رکوردها بیشتر میشه پی طبیعی هست که دستور Select شما با مشکل کمتری مواجه میشه و برای بدست آوردن جواب سوال شما محدوده رکورد کمتری را چک میکنه پس سرعت هم بالا تر خواهد رفت.
موفق باشید
محمد سلیم آبادی
شنبه 11 اردیبهشت 1389, 13:53 عصر
با تشکر از پاسخ شما. ولی سوال من درمورد محدود کردن تعداد ستون های برگشت داده شده است یعنی اگه محدود بشه بهتره یانه (از لحاظ کارایی)؟
زمانی که ایندکس مورد استفاده در Execution Plan شما تمام ستون های مقصد (همان ستون های برگشت داده شده) را پوشش یا به اصطلاح Cover ندهد، در این حالت نیاز هست که از کلاستر ایندکس جدول، داده های ستون های مورد نیاز را بدست آورد که به این عمل اصطلاحا Look Up گفته می شود. این Look Up هزینه ی بالایی به همراه دارد.
(با فرض اینکه شاخص شما تمام ستون ها را Cover داده است) حالا هر چقدر تعداد و حجم این ستون ها بیشتر باشد برای پوشش آنها نیاز به یک شاخص حجیم تر خواهیم داشت و در نتیجه داده های بیشتری نیاز به خوانده شدن دارند و در نهایت عملیات I/O بیشتر خواهد شد.
AminSobati
شنبه 11 اردیبهشت 1389, 22:53 عصر
با تشکر از پاسخ شما. ولی سوال من درمورد محدود کردن تعداد ستون های برگشت داده شده است یعنی اگه محدود بشه بهتره یانه (از لحاظ کارایی)؟
علاوه بر Bookmark Lookup و تعداد Pageهایی که خوانده میشن، پهنای رکورد (تعداد بایتهای هر رکورد) یکی از فاکتورهای حائز اهمیت در عملکرد کوئری هست. در Graphical Plan یکی از مواردی که نمایش داده میشه Estimated Row Size هست. طبعا وقتی فیلدهای کمتری درخواست کنید، حجم کمتری از اطلاعات باید Stream بشه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.