ورود

View Full Version : کدام یک از این دو stored procedure بهینه تر و کارآمدتر هست؟



veniz2008
پنج شنبه 25 خرداد 1391, 10:09 صبح
سلام،من واسه انجام عملیات های اصلی در برنامه(درج و حذف و ویرایش و جستجو) از دو روش تا حالا استفاده کردم،میخوام بدونم کدوم یک از این دو روش بهینه تر هست.من واسه انجام عملیا تها از STORED PROCEDURE استفاده میکنم،حالا نکته ای که هست مثلا برای درج کاربر جدید در جدولم دو روش کلی رو تا الان انجام دادم(هر دو روش کاملا جواب میدن،بحث بر سر بهینه بودن اون ها در پروژه های متوسط به بالاست)،روش اول:داخل sp ای که مینویسم چک میکنم که آیا این کاربر قبلا ثبت شده یا نه(در واقع از متد EXIST استفاده میکنم)،بعدش نتیجه رو به محیط دات نت میفرستم. روش دوم : داخل sp ازیک select معمولی(یعنی بدون تابع EXIST) استفاده میکنم و نتیجه رو داخل یک دیتاتیبل یا دیتاست میریزم و بعد چک میکنم که آیا درون این دیتاتیبل(یا دیتاست)رکوردی وجود داره یا نه(اگه رکوردی بود یعنی اون کاربر قبلا ثبت شده)،در پروژه های کوچیک فرق این دو روش مشخص نمیشه ولی واسه جدولی که رکوردهای زیادی داره احتمال زیاد فرق داشته بشه!،لطفا بگید که کدوم روش مناسب تره(با ذکر دلیل)،تشکر.

Galawij
پنج شنبه 25 خرداد 1391, 10:41 صبح
سلام.
جواب سوال شما اگر کمی بهش فکر می کردید، کاملا واضحه!
بهتره عملیات اصلی برنامه (درج، حذف، به روز رسانی و ...) رو سمت بانک اطلاعاتی انجام بدید و تا می تونید نتایج Select خروجی SP ها را با استفاده از شرط Where محدودتر کنید(حتی می تونید از روش Paging هم استفاده کنید). این کار میزان داده های برگشتی رو کمتر و سرعت واکشی داده ها را افزایش می دهد.
در روش دوم شما یکبار کل داده ها را واکشی می کنید و در سمت برنامه زمانی را نیز به مقایسه اختصاص می دید!!!
تا جایی هم براتون امکان داره از دستورات شرطی در داخل SP ها استفاده نکنید و نیازتون را با سایر دستورات T-SQL مرتفع کنید.
موفق باشید.

مهدی هادیان2
پنج شنبه 25 خرداد 1391, 11:37 صبح
سلام.
جواب سوال شما اگر کمی بهش فکر می کردید، کاملا واضحه!
بهتره عملیات اصلی برنامه (درج، حذف، به روز رسانی و ...) رو سمت بانک اطلاعاتی انجام بدید و تا می تونید نتایج Select خروجی SP ها را با استفاده از شرط Where محدودتر کنید(حتی می تونید از روش Paging هم استفاده کنید). این کار میزان داده های برگشتی رو کمتر و سرعت واکشی داده ها را افزایش می دهد.
در روش دوم شما یکبار کل داده ها را واکشی می کنید و در سمت برنامه زمانی را نیز به مقایسه اختصاص می دید!!!
با سلام
ایده ی شما رو کاملا قبول دارم؛ ولی یه سوال پیش میاد تا اون جایی که متوجه شدم باید بیایم و توی مثلا sp insert ابتدا ببینیم که وجود داره و خیر و اگه نداشت عمل درج انجام شود. در اینصورت ماژولاریته زیر سوال نمی ره؛ چراکه انتظار اینکه در متد درج تنها عمل درج صورت بگیره نه چیز دیگه ای.

تا جایی هم براتون امکان داره از دستورات شرطی در داخل SP ها استفاده نکنید و نیازتون را با سایر دستورات T-SQL مرتفع کنید.

منظورتون اینه که از دستور if استفاده نکنیم؟ اگه این طوره این دستور رو با چی پیاده سازی کنیم.
با سپاس فراوان