PDA

View Full Version : سوال: تفاوت سرعت view و store procedure



ehsaniran59
چهارشنبه 23 مرداد 1387, 08:46 صبح
با سلام

از دوستان با تجربه تر خواهش می کنم توضیح بدن که در واکشی اطلاعات سرعت view بیشتره یا سرعت store procedure .

ممنون

ASKaffash
چهارشنبه 23 مرداد 1387, 17:52 عصر
باسلام
عموما چنین مقایسه ای هنگامی میتواند مد نظر قرار گیرد که یک SP هیچ پارامتر وروی نداشته باشد وتنها درون منطق SP یک دستور Select تکی و مشابه دستور Select درون View باشد در این حالت چون هردو Compile می شوند نباید اختلاف سرعت داشته باشند ولی از نظر امنیتی View بر SP الویت دارد

AminSobati
چهارشنبه 23 مرداد 1387, 22:35 عصر
دوست عزیزم،
تفاوت سرعت به اون معنی که شما در ذهن دارید خیر، وجود نداره. اگر وارد بحث فنی بشیم و خیلی مو شکافی کنیم، شاید در حد چند هزارم ثانیه در Compile تفاوت داشته باشند (که خود این هم اما و اگرهای زیادی داره). چیزی که توصیه میشه این هست که همیشه Queryهای خودتون رو داخل SP بنویسید و حتی اگر از View استفاده میکنید، باز هم داخل SP باشه. مزایای SP چیزی فراتر از سرعت هست. مثلا امنیت، استفاده بهینه از CPU و Memory و غیره...

SYNDROME
پنج شنبه 24 مرداد 1387, 07:30 صبح
با تشکر از امین گل
با توجه به گفته های شما اگر من بخواهم یک View را اجرا کنم که قرار است اسامی افراد را برگرداند.
باید اول یک SP را فراخوانی کنم و داخل آن View خود را اجرا کنم و خروجی SP را از نوع Table بگیرم تا رکوردها را به داخل برنامه برگرداند.
آیا این گفته درست است؟
اگر امکان دارد کمی در رابطه با امنیتی که در بالا اشاره کردید توضیح دهید.
در زمان فراخوانی خود view و فراخوانی SP.
موفق باشید

ali_kolahdoozan
پنج شنبه 24 مرداد 1387, 07:53 صبح
در صورت استفاده از SP منابع سيستمي براي بار بعدي حفظ ميشه و plan ها باقي ميماند . اين خود ميتونه موثر باشه . در ضمن تا آنجا كه من تست كردم مثلا در Profiler در صورت اجراي sp فقط اسم مي ْآيد اما در view خود متن query آشكار ميشه اين ميتونه يك پارامتر امنيتي كوچيك محسوب بشه .

ehsaniran59
پنج شنبه 24 مرداد 1387, 10:19 صبح
از همه دوستانی که راهنمایی کردند ممنون .

AminSobati
پنج شنبه 24 مرداد 1387, 18:22 عصر
و خروجی SP را از نوع Table بگیرم تا رکوردها را به داخل برنامه برگرداند.



متوجه این قسمت نشدم! خروجی SP رو به چه شکل از نوع Table بگیرید؟ در SP هر وقت شما یک Query اجرا کنید، خواه از جدول خواه از View، خروجی به برنامه شما برمیگرده.
از لحاظ امنیت، برای SP شما میتونین سطح دسترسی تعریف کنید. فرضا اگر یک SP گزارش محرمانه ای تهیه میکنه، کاربرهای خاصی رو مجاز میکنین تا بتونن Exec کنند. یا همچنین ممکنه کاربر اجازه Insert مستقیم روی جدول خاصی رو نداشته باشه اما اگر اجازه Exec یک SP رو داشته باشه که اون SP عمل Insert رو انجام میده، بواسطه SP کاربر میتونه با کنترلهای مورد نظرتون عمل Insert انجام بده.