آموزش گامبهگام 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 بیاموزید.




Creator/Artist: Porsche Newsroom
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.