مشخصات مقاله
-
1598
-
0.0
-
4639
-
0
-
0
اطمینان از ایندکس شدن تمامی ستونها
اطمینان از ایندکس شدن تمامی ستونها
وقتی که یک ایندکس می تواند به اجرای یک query و ستون هایی که JOIN predicate شما را تشکیل می دهند، کمک کند سناریوهای مختلفی وجود دارد و مسئله ی مهمی می باشد.
توضیحات:
برای اینکه این نکته توضیح دهیم، اجازه بدهید نگاهی به یک query ساده داشته باشیم که جدول های Parent و Child را به یکدیگر متصل می کند. ما با وارد کردن یک فیلترParentID به عبارت WHERE، مجموعه ی نتیجه را کوچک نگاه می داریم. در اینجا می توانید وضعیت را مشاهده کنید:
SELECT * FROM [dbo].[Parent] P INNER JOIN [dbo].[Child] C ON P.ParentID=C.ParentID WHERE P.ParentID=32433
با مشاهده ی explain plan برای این query، متوجه می شویم که SQL Optimizer باید یک index scan روی جدول Child انجام دهد، گرچه ما فقط به دنبال یک ParentID خاص از جدول Parent هستیم.
اجازه بدهید یک ایندکس روی ستون اتصال، Child.ParentID، اضافه کنیم وتاثیر آن را روی explain plan مشاهده کنیم. در اینجا وضعیت SQL را مشاهده می کنید.
CREATE NONCLUSTERED INDEX idxChild_ParentID ON [dbo].[Child] ([ParentID]) -- cleanup statements DROP INDEX Child.idxChild_ParentID
با استفاده از همان query در بالا، اگرexplain plan را دوباره تولید کردیم، پس از افزودن ایندکس در زیر مشاهده می کنیم که اکنون SQL Optimizer با استفاده از یک index seek، قادر به دسترسی به جدول Child می باشد که خیلی سریعتر اجرا شده و از منابع کمتری استفاده می کند.
هنگام افزودن ایندکس ها به ستون های پیوسته، نکته ی دیگری را نیز باید متذکر شویم. به عنوان یک خط مشی کلی، من معمولا با نمایه سازی (indexing) همه ی ستون های کلید خارجی شروع می کنم و فقط اگر ببینم تاثیر منفی دارند، آنها را حذف می کنم. این تمرین به این خاطر پیشنهاد داده می شود که اغلب اوقات ستون ها هستند که باعث اتصال جدول ها می شوند و شما تمایل دارید یک اجرای کاملا خوب از چنین ستون های ایندکسشده ای مشاهده کنید.