Column Stored Index یکی از قابلیتهای جالبی است که در SQL Server 2012 ارائه شده است. بوسیله این قابلیت میتوان سرعت اجرایی کوئریهای را تا چندین برابر بهبود بخشید.
مایکروسافت مهمترین هدف خود را از ارائه این قابلیت افزایش سرعت اجرای کوئریهای بر روی Data Warehouseهای بزرگ ذکر کرده است.
اما میتوان از آن در شرایطی خاص بر روی OLTP نیز استفاده نمود.
قبل از اینکه به معرفی این قابلیت جدید SQL Server بپردازیم باید شما با مفاهیم اولیه درباره Performance Tuning آشنا شوید.
۱- آشنایی با مفهوم Data File و Log File : همانطور که میدانید یک بانک اطلاعاتی در SQL Server حداقل از دو فایل (Data File و Log File) تشکیل شده است. در Data File کلیه اشیائی (مانند فیلد، جدول، ایندکس و…) که شما ایجاد میکنید ذخیره میشود و به طور ساده در Log File هر چیزی که منجر به تغییر این دادهها شود ذخیره میشود. برای مثال چنانچه شما مقدار رکوردی را تغییر دهید Log عملیات مربوط به تغییر در Log File ثبت میگردد. این Log میتواند شامل تصویر داده قبل و بعد از تغییر داده و همچنین زمان انجام کار و… باشد.
۲- آشنایی با مفهوم Page : همانطور که قبلاً هم اشاره کردیم دادههایی که شما ایجاد کردهاید در درون Data File ثبت میشود. درون Data File بلوکهای ۸KB قرار دارد که به این بلوکها Page میگویند. در SQL Server بیش از ۱۰ نوع Page وجود دارد. که SQL Server بر حسب نیاز از آنها استفاده میکند.

۳- آشنایی با مفهوم Index در SQL Server: به طور خیلی ساده، ایندکس لیست مرتب شدهای از دادهها است که بر اساس منطقی خاص مانند عدد، رشته، تاریخ و … ایجاد شده است. هدف از ایجاد ایندکس افزایش سرعت جستجو برای بازیابی دادهها میباشد.
۴- آشنایی با انواع ایندکسها:
در SQL Server پنج نوع ایندکس به شرح زیر وجود دارد
• Clustered Index: این نوع ایندکسها بر روی دادههای عادی مانند عدد، رشته، تاریخ و… ایجاد میشوند. زمانیکه یک Clustered Index بر روی یک جدول ایجاد میکنید ترتیب و چینش فیزیکی رکوردها بر اساس کلید ایندکس خواهد بود. بنابراین یک جدول صرفاً میتواند یک ایندکس از نوع Clustered داشته باشد.
• NonClustered Index: این نوع ایندکسها مانند Clustered Indexها بر روی دادههای عادی مانند عدد، رشته، تاریخ و… ایجاد میشوند. زمانیکه یک ایندکس از نوع NonClustered بر روی جدول ایجاد میکنید کلید ایندکس در فضایی دیگری جدای از فضای جدول مرتب شده و مورد استفاده قرار میگیرد. به طور کلی در SQL Server میتوان تا ۹۹۹ ایندکس از نوع NonClustered را ایجاد کرد.
• XML Index : این نوع ایندکسها بر روی دادههایی که در قالب ساختار XML هستند ایجاد میشود.
• Spatial Index : این نوع ایندکسها بر روی دادههایی که از نوع جغرافیایی هستند ایجاد میشود.
• Column Stored Index : نوع جدیدی از ایندکسها هستند که در SQL Server 2012 معرفی شدهاند که سرعت دسترسی به دادهها در آن بیش از سایر ایندکسها میباشد.
۵- آشنایی با مفهوم Execution Plan : Plan اجرایی یا نقشه اجرایی کوئری ترتیب اجرای فیزیکی دستورات را مشخص مینماید. زمانیکه شما کوئری را اجرا میکنید SQL Server آن را به همان ترتیبی که نوشته شده است اجرا نمیکند. بلکه ترتیب دسترسی به دادههای موجود در جداول با توجه به پارامترهای مختلف مانند وضعیت ایندکسها، وضعیت منابع سرور و… خواهد بود.
پس از مشخص شدن ترتیب اجرای فیزیکی SQL Server نقشه آن را با عنوان Execution Plan ذخیره میکند تا در آینده بتواند از آن استفاده کند. چنانچه بخواهید نقشه اجرایی با Execution Plan یک کوئری را مشاهده نمایید کافی است که کوئری مورد نظر خود را Highlight نموده و کلید Ctrl+L را فشاره دهید تا Estimate Plan یا نقشه اجرایی تخمینی برای شما نمایش داده شود.
در تصویر زیر نمونهای از Execution Plan یک کوئری نمایش داده شده است.
SELECT
*
FROM
Orders O
INNER
JOIN
[
Order
Details] OD
ON
O.OrderID=OD.OrderID
INNER
JOIN
Employees E
ON
O.EmployeeID=E.EmployeeI

نکته : Execution Plan از سمت راست به چپ و از بالا به پایین خوانده میشود.