SQL Server Training with AdventureWorks Sample Database

آموزش گام‌به‌گام SQL Server با دیتابیس نمونه‌ی AdventureWorks | از مبتدی تا پیشرفته | (قسمت ۱۰)


درس ۱۰: بهینه‌سازی کوئری‌ها و ایندکس‌ها (Indexing)

🎯 هدف درس:

در این درس یاد می‌گیرید چگونه عملکرد کوئری‌ها را در SQL Server بهبود دهید و با مفهوم ایندکس (Index) آشنا می‌شوید. همچنین یاد خواهید گرفت که چطور ایندکس‌ها موجب افزایش سرعت جست‌وجو و مرتب‌سازی داده‌ها می‌شوند و در چه شرایطی ممکن است کارایی سیستم را کاهش دهند.

📘 مفهوم نظری:

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

۱. مشاهده برنامهٔ اجرایی (Execution Plan):

SET SHOWPLAN_ALL ON;
GO
SELECT * FROM Production.Product WHERE ProductID = 100;
GO
SET SHOWPLAN_ALL OFF;

کاربرد: مشاهده نحوهٔ اجرای کوئری توسط SQL Server و شناسایی نقاط کندی.

۲. ساخت ایندکس ساده (Non-Clustered Index):

CREATE INDEX IX_Product_Name
ON Production.Product (Name);

کاربرد: افزایش سرعت جست‌وجو در ستون Name.

۳. ساخت ایندکس خوشه‌ای (Clustered Index):

CREATE CLUSTERED INDEX IX_ProductID
ON Production.Product (ProductID);

کاربرد: مرتب‌سازی فیزیکی رکوردها بر اساس ستون کلیدی.

۴. حذف ایندکس:

DROP INDEX IX_Product_Name ON Production.Product;

۵. ایندکس ترکیبی (Composite Index):

CREATE INDEX IX_Product_Color_Price
ON Production.Product (Color, ListPrice);

کاربرد: بهینه برای جست‌وجو در چند ستون هم‌زمان.

۶. استفاده از INCLUDE برای پوشش‌دهی کوئری:

CREATE INDEX IX_Product_Search
ON Production.Product (Name)
INCLUDE (ListPrice, Color);

کاربرد: به SQL Server کمک می‌کند تا کوئری بدون مراجعه مجدد به جدول اجرا شود.

۷. مشاهدهٔ ایندکس‌های موجود در جدول:

EXEC sp_helpindex 'Production.Product';

۸. ایندکس منحصربه‌فرد (Unique Index):

CREATE UNIQUE INDEX IX_ProductNumber
ON Production.Product (ProductNumber);

کاربرد: جلوگیری از ورود داده‌های تکراری در یک ستون.

۹. بازسازی ایندکس‌ها (Rebuild):

ALTER INDEX ALL ON Production.Product REBUILD;

کاربرد: بهبود عملکرد ایندکس‌ها پس از حجم زیاد درج یا حذف داده.

۱۰. راهکارهای بهینه‌سازی عمومی کوئری‌ها:

  • از SELECT * خودداری کنید؛ فقط ستون‌های موردنیاز را انتخاب کنید.
  • از ایندکس روی ستون‌هایی که زیاد به‌روزرسانی می‌شوند اجتناب کنید.
  • در WHERE از توابع روی ستون‌های ایندکسی استفاده نکنید.
  • همیشه کوئری‌ها را با Execution Plan بررسی کنید.
  • برای داده‌های حجیم از Viewهای ایندکس‌دار (Indexed View) استفاده کنید.

🧠 تمرین‌های عملی:

  • تمرین ۱: ساخت ایندکس روی ستون Name در جدول Product.
  • تمرین ۲: ایجاد ایندکس ترکیبی روی ستون‌های Color و ListPrice.
  • تمرین ۳: ایجاد ایندکس منحصربه‌فرد روی ProductNumber.
  • تمرین ۴: حذف یک ایندکس ایجادشده.
  • تمرین ۵ (چالشی): بازسازی همهٔ ایندکس‌های جدول پس از درج داده‌های زیاد.

💡 پاسخ تمرین‌های عملی:

-- تمرین ۱
CREATE INDEX IX_Product_Name
ON Production.Product (Name);

-- تمرین ۲
CREATE INDEX IX_Product_Color_Price
ON Production.Product (Color, ListPrice);

-- تمرین ۳
CREATE UNIQUE INDEX IX_ProductNumber
ON Production.Product (ProductNumber);

-- تمرین ۴
DROP INDEX IX_Product_Name ON Production.Product;

-- تمرین ۵ (چالشی)
ALTER INDEX ALL ON Production.Product REBUILD;

📚 جمع‌بندی درس:

در این درس یاد گرفتید چگونه با استفاده از ایندکس‌ها سرعت اجرای کوئری‌ها را افزایش دهید. همچنین با انواع ایندکس‌ها (خوشه‌ای، غیرخوشه‌ای، منحصربه‌فرد و ترکیبی) و نحوهٔ ساخت، حذف و بازسازی آن‌ها آشنا شدید. در درس بعد، موضوع مهم مدیریت کاربران و سطح دسترسی‌ها را بررسی خواهیم کرد تا امنیت و کنترل داده‌ها را در SQL Server بیاموزید.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *