پیشنهاد ساخت ایندکس مناسب

چاپ

3- تعریف ایندکس های مناسب که البته ایجاد نشده اند یا Missing Index

یکی دیگر از فرآیندهای نگهداری ایندکس ها، تعریف ایندکس های مناسب است. اما در پایگاه داده های حجیم چگونه ایندکس هایی را که باید تعریف می کردیم ولی ایجاد نشده اند را پیدا کنیم. آیا راه حلی اتوماتیک وجود دارد که ایندکس های مذکور را بصورت خودکار پیشنهاد و ایجاد کند؟

در صورت نبود ایندکس مناسب  = پیشنهاد ایندکس توسط SQL Server

این قابلیت از SQL Server 2005 به بعد اضافه شده است و SQL Server در صورت نبود ایندکس مناسب، پیشنهاد ساخت آنرا می دهد.


روش کار Missing Index ها یا نحوه یپشنهاد ساخت ایندکس های تعریف نشده توسط SQL Server

هر کوئری قسمتی بنام SARG که مخفف واژگان Search Arguments است، دارد. به مثال زیر توجه فرمایید:

SARG

Select f1,f2, ... From Tbl01 Where CustomerID=1 And City='Tehran'
Select f1,f2, ... From Tbl01 Where City='Tehran'
Select f1,f2, ... From Tbl01 Where Name='Ali'

هر بار که کوئری ها از سمت Application به پایگاه داده ارسال می شوند قسمت های متمایز شده در مثال بالا در پایگاه داده ذخیره می شوند و بهینه ساز یا Optimizer پایگاه داده با استفاده از آنالیز این داده ها، ساخت ایندکس مناسب را پیشنهاد می دهد.

نکته: داده های مربوط به SARG تا زمانی که سرور Reset نشده باشد قابل دسترس است.


مثال عملی مربوط به Missing Index

در ابتدای مثال های عملی مربوط به Missing Index، کوئری زیر از لحاظ ایندکس گذاری بررسی شده است: (در ادامه مثال ها به مباحث بسیار کاربردی و جالب پرداخته شده است)

Missing Index

SELECT City, StateProvinceID, PostalCode
    FROM Person.Address
        WHERE StateProvinceID = 9;
GO

توجه: برای مشاهده Missing Index قبل از اینکه کوئری بالا را اجرا نمایید، از آیکن های نوار افقی بالای SQL Server روی آیکن include actual execution plan کلیک نمایید. می توانید از کلیدهای میانبر Ctrl + M استفاده کنید:

در صورتی که کوئری بالا را در SQL Server اجرا کنید، با توجه به اینکه در قسمت Search Arguments ایندکسی برای فیلد StateProvinceID تعریف نشده است، بهینه ساز یا Optimizer پایگاه داده، پیشنهاد ساخت ایندکس را اعلام می کند.

اما برای مشاهده این پیغام، روی تب Execution Plan کلیک کرده و مطابق شکل زیر متن سبز رنگ که متعلق به پیشنهاد ساخت ایندکس است را مشاهده نمایید:

اما اگر روی متن سبز رنگ کلیک کرده و گزینه Missing Index Detail را انتخاب نمایید، در یک صفحه جدید، کوئری ساخت ایندکس در اختیار شما قرار خواهد گرفت:

Missing Index Detail

/*
Missing Index Details from SQLQuery1.sql - SQL2014-TEST.AdventureWorks2012 (sa (67))
The Query Processor estimates that implementing the following index could improve the query cost by 97.1831%.
*/

/*
USE [AdventureWorks2012]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [Person].[Address] ([StateProvinceID])
INCLUDE ([City],[PostalCode])
GO
*/


در ادامه بحث Missing Index خواهید دید ...!

با خرید جلسه 6 از بسته آموزشی "افزایش کارایی پایگاه داده" موارد زیر را خواهید دید:

  1. آیا با استفاده از DMVهای موجود می توان Missing Index ها را پیدا کرد؟
  2. من یک کوئری آماده می خوام که Missing Indexها را پیدا کرده و کوئری ساخت آنها را نیز در اختیارم قرار دهد ...!

دسترسی به موارد آموزشی بالا در بسته خریداری شده

نقطه شروع بحث بالا (Missing Index) در ویدئو: 15:20


برای خرید و دانلود کامل آموزش پیشرفته SQL Server کلیک کنید.