مشخصات مقاله
-
1623
-
0.0
-
5891
-
0
-
1
مثال اول از طرح query
مثال اول از طرح query
در این بخش با استفاده از دیتابیس AdventureWorksDW وارد یک query ساده می شویم.
توشیحات
یک query ساده را اجرا کرده و طرح Actual Graphical Execution را مورد بررسی قرار خواهیم داد.
اجازه بدهید تولیدات جدول را براساس ProductSubcategoryKey فیلتر کرده و ثبت ها را در جایی که ProductSubcategoryKey برابر 1 است، لیست کنیم.
بنابراین query ما اینطور خواهد بود:
SELECT ProductKey, ProductSubcategoryKey FROM AdventureWorksDW..DimProduct WHERE ProductSubcategoryKey = 1
یک پنجره ی جدید باز کرده و CTRL+M را فشار دهید تا Actual Execution Plan را وارد کرده و سپس query بالا را اجرا کنید. طرح Actual Query برای این query در زیر نمایش داده شده است.
در تصویر بالا مشاهده می کنید که SQL Server به این روش query را پردازش می کند:
- ایندکس Seek روی یک ایندکس NonClustered در جدول DimProduct ( هزینه 100 درصد.)
- بازگشت به مجموعه ی نتیجه را انتخاب کنید. (هزینه 0 درصد.)
- برای تجزیه ی طرح query باید به دنبال آیتم های زیر باشیم تا پیشرفت های ممکن را سرعت بخشیم.
- منابع فشرده ی عملکردها که در ان درصد بالاست.
- اسکن عملکردها.
- عرض پیکان بین اپراتورها ( هرچه پیکان ضخیم تر داده بیشتر)
- در این مثال 100 درصد منابع توسط عملکرد NonClustered Index Seek روی جدول DimProduct استفاده می شوند.
- ما در query خود در حال فیلتر کردن روی ProductSubcategoryKey در عبارت WHERE هستیم. اما چون ایندکسی که استفاده می کنیم، حاوی Product Key ( کلید تولید) و Product Subcategory Key (کلید زیرشاخه ی تولید) می باشد، یک ایندکس ساده ی عملکرد seek نیز می تواند درخواست را کامل کند.
- اجازه بدهید جزئیات عملکرد Index Seek را بررسی کنیم.
- ماوس خود را روی آیکن Index Seek در Execution Plan قرار دهید که یک ToolTip مانند زیر باید ظاهر شود:
در TollTip می بینید که فقط یک اجرا (Number of Executions تعداد اجراها) لازم بود که 38 (تعداد برآورد شده ی ردیف ها) ردیف درست را گزارش می دهد.
اجازه بدهید پیکان بین عملکردها را چک کنیم.
ماوس خود را روی آیکن SELECT در Execution Plan قرار دهید که یک ToolTip مانند زیر باید ظاهر شود.
مجددا مشاهده می کنیم که 38 ردیف گزارش می شود.
موردی که باید ذکر شود، Estimated Subtree Cost (برآورد هزینه ی زیردرخت) می باشد. از آنجایی که بیشترین قسمت عملکرد رها می شود، این هزینه ی کلی برای طرح query می باشد. این هزینه به SQL Server نیز کمک می کند تا تعیین کند چه زمان از یک طرح اجرایی همگام استفاده کند.
چگونه می توانیم اجرا را بهبود ببخشیم؟
برای این query نمی توان کاری انجام داد. هزینه ی کلی برآورد شده ی زیرمجموعه (Subtree) خیلی پایین میباشد، همچنین ما در حال انجام یک Index Seek برای گرفتن داده می باشیم، که خیلی بهتر از آن نمی شود.