خانه SQL Server مفهوم Logical Query Processing در SQL SERVER SQL Server دستورات SQL نوشته شده توسط: تیم فنی نیک آموز تاریخ انتشار: ۰۶ آذر ۱۴۰۰ آخرین بروزرسانی: 25 دی 1403 زمان مطالعه: 9 دقیقه ۳.۵ (۲) Logical Query Processing در SQL SERVER، شاید جالب باشه که با این مقدمه شروع کنیم که تعریف فرآیند چیست و متشکل از چه اجزایی هست؟ یک فرآیند در چه زمانی می تواند بهترین خروجی رو به شما بدهد و این که باید از چه بخش هایی تشکیل شده باشد و حتی چه قوانینی باید برای آن تعریف شود. که کلیه این اجزا در این فرایند خروجی مطلوب رو ارائه بدهند و در نهایت حاصل این کار نتیجه خوبی داشته باشد. می خواهیم با چند تا مثال که شاید برای همه ما خیلی ملموس و واقعی باشه این موضوع رو مقداری موشکافی کنیم. مفهوم Logical Query Processing در SQL SERVER یک باغبان رو در نظر بگیرید که با گونه های مختفی از گیاهان و درختان سروکار دارد، هر کدام از این درختان و گیاهان، ممکن است، در شرایط مختلفی نگهداری شوند. همچنین درختی ممکن است تا یک متر رشد کند و سپس ادامه این فرایند رشد، به شکل دیگری انجام شود یا درختی هم تا چندین سال، به رشد خود ادامه دهد و یا در فصل های مختلفی از سال به شیوه های مختفلی این فرایند متوقف شود و یا شکل ان عوض شود. همین فرآیند را می توانیم در مورد کسوف و خسوف هم مشاهده کنیم که طبق یک سری قوانین و شرایطی که از پیش تعریف شده است، در فازهای مختلف قبل و بعد و زمان خسوف می توانیم خروجی های مختلف این فرایند را مشاهده کنیم. پس اگر دقت کنید، در هر مرحله اجزایی در این فرآیند شرکت می کنند که بر روی نتیجه فعلی تاثیراتی اعمال کرده و سپس از صحنه ممکن است خارج شوند یا به شکل دیگری، تاثیر خود را در مراحل دیگر بگذارند. افراد علاقهمند میتوانند با مطالعه مقاله پرکاربردترین دستورات SQL Server، دانش خود را در زمینه کوئرینویسی گسترش دهند. در سناریو اول باغبان این فرآیند ها را به درستی می شناسد و با انواع و اقسام گونه های گیاهی و درختان مختلف به خوبی آشنایی داشته و طی یک فرایند این مراحل رشد را برای درخت یا گیاه مورد نظرش زیر نظر دارد. در فرآیند دوم هم سلسله عواملی محیطی با اولویت های مشخص و از پیش تعریف شده منجر به این پدیده زیبا خواهند شد.این موضوع به عنوان پیش زمینه ایی بود که با یک اصلاح تخصصی آشنا بشویم و آن مفهوم Logical Query Processing Phases یا اجرای منطقی فازهای اجرایی هست. در واقع فازهای اجرایی برای این عنوان می شود که اسکریپت اجرایی شما عملیاتی شده و خروجی نهایی رو نمایش دهد. در رابطه با این موضوع که که این منطق به چه شکل هست در ادامه مقاله به معرفی جزییات و بخش های مختلف آن خواهیم پرداخت. اگر اسکریپت زیر را بررسی و تحلیل کنیم متوجه میشویم که چندین عبارت کلیدی در این کوئری استفاده شده که بتوانیم مطابق با درخواستی که به ما اعلام شده است خروجی کار را استخراج کنیم. به صورت خلاصه اسکریپت زیر این خروجی را به ما ارائه می کند که ۱۰ نفر از پر سودترین بازاریاب های فروش شرکت را بتوانیم از دیتایی که داریم استخراج کنیم. ذکر این نکته لازم هست که بدانیم در یک فرایند فروش، اجزا و المان های مختلفی برای تحلیل می توانیم داشته باشیم. نظیر موارد زیر: کالا ها گروه کالا بازاریاب های فروش وسایل حمل و نقل شهر ها و مناطق طبقه بندی شده فروش که تمرکز این کوئری بر روی تحلیل این موارد هست که بتوانیم با تحلیل ساده ایی بر روی عملکرد فروشنده ها یا بازاریاب های فروش به این هدف دست پیدا کنیم که به عنوان مثال در بحث پورسانت یا ارتقا شغلی به سمت های بالاتر برای این فروشنده ها به چه شکل این اطلاعات را تحلیل کنیم . SELECT * FROM ( SELECT DISTINCT TOP 10 s.[Salesperson Key] AS Salesperson, SUM(s.profit) AS profit FROM fact.Sale s INNER JOIN fact.Sale s1 ON s1.[sale key] = s.[Sale Key] INNER JOIN Dimension.Employee e ON s.[Salesperson Key] = e.[Employee Key] WHERE e.[Is Salesperson] = 1 GROUP BY s. [Salesperson Key] ORDER BY Salesperson ) A ORDER BY A.[Salesperson] OFFSET 7 ROWS; معمولا نوع خواندن این مدل اسکریپت ها از دستور SELECT شروع می شود و به سمت پایین اسکریپت، مرحله به مرحله، شرط ها یا گروهبندی های مختلف بر روی نتیجه نهایی اعمال می شود. ولی با این دید و نوع نگرشی که ما داریم Engine با این منطق این کوئری را پردازش نمی کند. در اینجاست که باید بررسی کنیم اولویت اجرای این کوئری با کدام کلمه کلیدی شروع شده و به چه شکل قرار هست این کوئری تحلیل شود. اگر با یک دید بالا به پایین به این قضیه نگاه کنیم، سبک نوشتن و توسعه کوئری ها به این صورت هست که ممکن یک سری از عبارت حتما نیاز هست ذکر شود و تعدادی از آن ها بسته به سناریو و تحلیلی که داریم نیاز می شود که استفاده شود. این ساختار به شکل زیر است: SELECT DISTINCT TOP <select_list> FROM <left_table> join <Join type> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> WITH {CUBE | ROLLUP} HAVING <having_condition> ORDER BY <order_by_list> اگر بخواهیم با منطقی که پایگاه داده SQL SERVER برای اجرای Query ها پیاده سازی می کند اشنا شویم، نیاز هست که حتما مدل ذهنی و پیش فرض خودمان را عوض کرده و با به عبارتی همانند Engine فکر کنیم به این شکل باید این ساختار را یاد بگیریم: (۸) SELECT (9) DISTINCT (11) <TOP_specification> <select_list> (۱) FROM <left_table> (۳) <join_type> JOIN <right_table> (۲) ON <join_condition> (۴) WHERE <where_condition> (۵) GROUP BY <group_by_list> (۶) WITH {CUBE | ROLLUP} (۷) HAVING <having_condition> (۱۰) ORDER BY <order_by_list> شماره هایی که در ابتدای هر خط نوشته شده است، مطابق با سبکی رایج کوئری نویسی در نظر گرفته شده. در واقع اولویت اجرای هر فاز را برای ما مشخص می کند. کوئری شما هر چه قدر که تو در تو نوشته شده باشد و Selectهای مختلفی در ابتدای آن باشد، تا زمانی که دیتا سورس یا مخزن کلی اطلاعات را پیدا نکند به این جستجو ادامه می دهد. یعنی FROM کوئری شما در اولین قدم باید پردازش شود و اطلاعات لازم برداشته شود. در مرحله بعد اگر در کوئری از یک نوع خاصی از Join ها استفاده شده باشد، نوبت به اجرای این فاز می رسد که اطلاعات این جداول ترکیب شود.و برای پیدا کردن ستون ها یا اطلاعات دیگر این ارتباط، حاصل شود. در این جا نمی خواهیم که انواع Join ها را بررسی کنیم. فقط به این نکته دقت داشته باشید که منطق این موضوع را به خوبی متوجه شوید. به همین ترتیب هر چه قدر Joinهای مختلفی در این قسمت نوشته شده باشد، این ارتباطات توسط شرط هایی که در قسمت On اعمال می شود، می توانند با سایر جداول ارتباط گیرند. خب تا این مرحله ما با کلی جدول ارتباط گرفتیم که قرار هست که فیلترهایی بر روی خروجی این مرحله اعمال کنیم. در مرحله بعد در صورتی که قرار هست. پیشنهاد میکنیم برای درک بهتر مفاهیم کوئری نویسی را مطالعه کنید. کوئری های تحلیلی بنویسیم از عبارت های کلیدی Group By و اعمال شرط های آن استفاده میکنیم. سپس Engine به اولین سطر از کوئری شما رفته و تعداد رکوردهای مد نظر را جهت نمایش ارایه خواهدکرد .. سپس این خروجی به اخرین سطر کوئری ارجاع داده شده تا مرتب سازی ان انجام شده و در مرحله اخر هم مجدد به اولین خط رجوع می شود که مقادیر تکراری این اطلاعات به کاربر نمایش داده نشود. پس ذکر این نکته بسیار حائز اهمیت هست که حتما شماره هایی که در ساختار بالا مشاهده می کنید را به خوبی یاد گرفته که در چرخه اجرای این فرایند دقیقا بتوانید تحلیل های خود را از کوئری های نوشته شده به خوبی ارایه دهید . نکته: به طور کلی قاعده Logical Query Processing یا LQP به این موضوع اشاره می کند که رعایت حق تقدم و تاخر در اجرا تمامی این فرآیندها مطابق با یک قانون مشخص و با اولویت های خاص در نظر گرفته شده است. تمامی این فرایند ها در واقع در SQL Server تحت عنوان مرحله Parsing شناخته می شود که اولویت استفاده از این کلمات و درست استفاده شدن از آنها رعایت شده باشد . این مثال رو مشاهده کنید SELECT ID, (Salary * 12) AS YearlySalary FROM Employee WHERE YearlySalary > 10000; اگر مطابق با منطقی که توضیح داده شد، این کوئری را اجرا کنید، شاهد خطای زیر خواهید بود : Invalid column name ‘YearlySalary’. این خطا دقیقا نشان می دهد که اولا، کوئری شما از جدول Employee شروع به جمع آوری داده می کند و در مرحله بعد باید مطابق با منطق Lgoical Query Processing باید به قسمت Where رفته و این خط را اجرا کند. ولی همان طور که مشاهده کردید. در این قسمت از الیاسی استفاده شده که هنوز در قسمت مورد نظر، پردازش نشده SQL Server در جریان نیست که همچین الیاسی در کد به کار رفته که منظور همان YearlySalary هست. لذا تسلط بر این منطق، باعث می شود، زمانی که یک کوئری بسیار بزرگ را مشاهده کردید، بتوانید به راحتی تحلیل کنید که اولا چه اطلاعاتی از چه جداولی استخراج می شود و ثانیا این که در مرحله بعد قرار است چه فیلترهایی بر روی این کوئری اعمال شود و به چه سبک گروه بندی های آن انجام و نتیجه نهایی مشخص شود. سخن پایانی همچنین خطایابی و متوجه شدن منطق کوئری های بزرگ با این تکنیک که خدمت شما ارائه شد به راحتی قابل استخراج است . برای آشنایی با جزییات این موضوع می توانید به کتاب اقای Itzik Ben-Gan که با عنوان T-SQL Querying منتشر شده است مراجعه کنید و با چارت اجرایی این فرایند بیشتر آشنا شوید. ما در نیک آموز منتظر نظرات ارزشمند شما درباره این مقاله هستیم. چه رتبه ای میدهید؟ میانگین ۳.۵ / ۵. از مجموع ۲ اولین نفر باش دانلود مقاله مفهوم Logical Query Processing در SQL SERVER فرمت PDF 7 صفحه حجم 1 مگابایت دانلود مقاله معرفی نویسنده مقالات 402 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده تیم فنی نیک آموز معرفی محصول ایمان باقری آموزش کوئری نویسی در sql server 2.190.000 تومان مقالات مرتبط ۰۲ آبان SQL Server ابزار Database Engine Tuning Advisor؛ مزایا، کاربردها و روش استفاده تیم فنی نیک آموز ۱۵ مهر SQL Server معرفی Performance Monitor ابزار مانیتورینگ SQL Server تیم فنی نیک آموز ۱۱ مهر SQL Server راهنمای جامع مانیتورینگ بکاپ ها در SQL Server تیم فنی نیک آموز ۰۸ مهر SQL Server Resource Governor چیست؟ آشنایی با نحوه پیکربندی و اهمیت های آن تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ