نمایش نتایج 1 تا 5 از 5

نام تاپیک: مقایسه Performance بین استفاده از CTE و Cursor

  1. #1

    مقایسه Performance بین استفاده از CTE و Cursor

    با سلام.
    من در مواردی از پروسیجرها برای افزایش عملکرد تصمیم به استفاده از CTE به جای Cursor گرفته ام. بخصوص Cursor هایی که محاسباتی بوده و نتیجه محاسبه یک رکورد در محاسبه رکورد بعدی تاثیر خواهد داشت. صرف نظر از چگونگی انجام کار , در مقایسه Performance بین این دو شیوه , چه می توان گفت؟
    با تشکر.

  2. #2

    نقل قول: مقایسه Performance بین استفاده از CTE و Cursor

    سلام.
    به این راحتی نمیشه نظر داد. چون ممکنه کوئری که شما با Cursor نوشتید رو بشه با ترفندهای دیگه هم نوشت.
    پیشنهاد میکنم یک نگاه این لینک بندازید.

  3. #3

    نقل قول: مقایسه Performance بین استفاده از CTE و Cursor

    از هر دو راه بنویسید و با Display estimated execution plan اونها رو به صورت دقیق و جزء به جزء مقایسه کنید
    اما تصور من اینه که با Index گذاری صحیح Cte می تونه خیلی بهتر باشه، Cursor آخرین راه حله.

    http://lh4.ggpht.com/_vPa0QtSASSk/S_...sEmulation.jpg

  4. #4

    نقل قول: مقایسه Performance بین استفاده از CTE و Cursor

    سلام
    با توجه به بررسی که کردم متوجه شدم اصولا CTE چیزی نیست که برای جایگزینی با Cursor اومده باشه و بنابراین کاربردهای خاص خودش رو داره و محدودیت های خودش رو هم.
    مثلا فکر می کنم CTE برای استفاده در درخت ها و یا جداول با تعداد رکوردهای کم , خوب جواب بده اما در کاربردهای مدل Recursive و با تعداد رکوردهای بالا نه. بخصوص اینکه شما محدودیت استفاده از تعداد بازگشت ها رو هم در اون دارید (32767 تا). نهایتا من وقتی CTE را بجای دو تا از Cursor هام گذاشتم توی هر دو تا با مشکل کاهش شدید Performance مواجه شدم !
    البته من چیزی که به دنبالش هستم و هنوز مشخصا به نتیجه ای نرسیدم اینه که :
    1- موارد بهینه کاربرد CTE کجاست؟ مثلا گفته بشه که در این شرایط بهترین گزینه است.
    2- برای بهینه کردن Cursor هام (که روی هر رکورد در اون محاسبه انجام میشه و نتیجه توی محاسبه رکورد بعد تاثیر داره) چکار می تونم بکنم؟ و یا اینکه Cursor رو با چه گزینه های ممکن دیگه ای می تونم جایگزین بکنم.
    با تشکر از دوستان.

  5. #5

    نقل قول: مقایسه Performance بین استفاده از CTE و Cursor

    سلام.
    البته با cte هم میشه به صورت ردیف به ردیف یک محاسبه ای رو مثل مانده حساب انجام داد. در روشهای بازگشتی هم تعدادش محدود هست ولی میشه نامحدودش کرد.
    در بحث performance تنها بررسی دستورات کفایت نمیکنه. شما باید نوع ایندکس ها رو نیز بررسی کنید. تعداد خواندن و نوشتن ها از هارد رو باید بررسی کنید.
    Execution Plan رو باید بررسی کنید و...
    با بررسی تمام اینها میشه حدس زد مشکل از کجاست. وتنها مثلا جایگزینی یک دستور با دستور دیگه الزاما کارساز نیست و ممکنه حتی شرایط رو بدتر کنه.

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •