PDA

View Full Version : بین دو دستور SELECT کدوم رو انتخاب کنم با توجه به Execution Plan



reza_edu
دوشنبه 19 اردیبهشت 1390, 23:44 عصر
سلام من دو دستور سلکت نوشتم تنها فرق این دو دستور در این دو قسمت نوشته شده در زیر هست :
دستور اول :
تو این دستور از شرط استفاده شده

CASE ISNULL(dbo.View_FaPersonApplicant.DateRegister,0) WHEN ISNULL(NULL,0) THEN NULL ELSE dbo.ToPersianDate(dbo.View_FaPersonApplicant.DateR egister) END AS DateRegister,
CASE ISNULL(dbo.View_FaPersonApplicant.DateLastEdit,0) WHEN ISNULL(NULL,0) THEN NULL ELSE dbo.ToPersianDate(dbo.View_FaPersonApplicant.DateL astEdit) END AS DateLastEdit,
CASE ISNULL(dbo.View_FaPersonApplicant.ManualRegisterDa te,0) WHEN ISNULL(NULL,0) THEN NULL ELSE dbo.ToPersianDate(dbo.View_FaPersonApplicant.Manua lRegisterDate) END AS ManualRegisterDate,

ونتیجه بدست اومده تو Execution Plan تو عکس زیر نشون داده شده
69765
دستور دوم:
تو این دستور فقط بجای شرط از تابع استفاده شده

dbo.ConvertPersianDate(dbo.View_FaPersonApplicant. DateLastEdit) AS DateLastEdit_Fa,
dbo.ConvertPersianDate(dbo.View_FaPersonApplicant. ManualRegisterDate) AS ManualRegisterDate_Fa


Execution Plan تو عکس زیر نشون داده شده
69766
حالا سوال من اینه که کدوم روش بهتر هست من زیاد از Execution Plan سر در نمیارم :متفکر: کدومش رو استفاده کنم. آیا این موارد تاثیر زیادی هم داره ؟

حمیدرضاصادقیان
سه شنبه 20 اردیبهشت 1390, 09:21 صبح
سلام دوست عزیز.
اینجوری نمیشه تصمیم گرفت.
شما باید Plan هارو Save کرده و اینجا قرار بدید تا بشه کل Plan رو مشاهده کرد.

reza_edu
سه شنبه 20 اردیبهشت 1390, 10:57 صبح
سلام حتما ولی چه جوری من بلد نیستم میشه راهنمائی کنید.

حمیدرضاصادقیان
سه شنبه 20 اردیبهشت 1390, 11:04 صبح
شما وقتی execution Plan رو تهیه کردید روی خود Plan راست کلیک کرده و گزینه Save Execution Plan رو انتخاب کنید.

reza_edu
سه شنبه 20 اردیبهشت 1390, 12:30 عصر
سلام ببخشید والا دلیل این سردرگمی تاپیک زیر هست http://barnamenevis.org/showthread.php?286133-%D8%A7%D9%84%D8%AD%D8%A7%D9%82-%D8%B3%D8%B7%D8%B1%D9%87%D8%A7%DB%8C-%D8%AC%D8%AF%D9%88%D9%84-(Concatenating-Rows)-%D8%A8%D9%87-%DA%86%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-%DA%A9%D9%86%D9%85%D8%9F

اما دو موردی که فرموده بودید تا قرار بدم در فایل همراه این پست قرار دادم. با تشکر

راستی sql server2008 استفاده کردم.

AminSobati
سه شنبه 20 اردیبهشت 1390, 17:21 عصر
سلام دوست عزیزم،
اگر تابع داخل Query گرفتن مجدد داره اتفاق میافته، میشه نتیجه گرفت وقتی در Query اصلی از این تابع استفاده کنید، به ازای هر رکورد، Query داخل تابع مجددا اجرا میشه در حالیکه اگر Query داخل تابع بعنوان Subquery با Query بیرونی ادغام بشه، Plan بهتری ممکنه بدست بیاد. این رو بعنوان یک راهنمایی کلی در نظر داشته باشید