۱۴۰۴/۰۷/۰۴
Columnstore Index
Columnstore Index چیست؟
به طور پیشفرض در SQL Server دادهها در Rowstore ذخیره میشن (یعنی ردیفی).
- هر ردیف (Row) شامل همه ستونهاست.
- مناسب برای عملیات OLTP (تراکنشی: Insert/Update/Delete زیاد).
ولی در Columnstore Index دادهها به صورت ستونی ذخیره میشن:
- هر ستون جداگانه ذخیره و فشردهسازی میشه.
- خیلی بهینه برای عملیات OLAP (تحلیلی/گزارشگیری روی حجم زیاد داده).
2️⃣ تفاوت Rowstore vs Columnstore
فرض کن جدولی داری با 1 میلیون رکورد و 20 ستون.
میخوای فقط مجموع Amount رو حساب کنی:
SELECT SUM(Amount) FROM Sales;
- در Rowstore → باید کل جدول (همه ستونها) خونده بشه، حتی اگه فقط 1 ستون لازم باشه.
- در Columnstore → فقط ستون
Amountخونده میشه → خیلی سریعتر و کممصرفتر.
3️⃣ انواع Columnstore Index
✅ Clustered Columnstore Index (CCI)
- دادههای جدول به صورت ستونی ذخیره میشن.
- کل جدول با فرمت Columnstore نگهداری میشه.
- مناسب برای Data Warehouse یا جداول خیلی بزرگ.
مثال:
CREATE CLUSTERED COLUMNSTORE INDEX CCI_Sales
ON Sales;
📌 اینجا جدول Sales دیگه Rowstore نیست → کل دادهها به صورت ستونی ذخیره شدن.
✅ Non-Clustered Columnstore Index (NCCI)
- مثل ایندکس معمولی، به صورت جداگانه ساخته میشه.
- دادههای جدول اصلی همچنان Rowstore هستن، ولی یک نسخه ستونی برای Queryهای تحلیلی ساخته میشه.
مثال:
CREATE NONCLUSTERED COLUMNSTORE INDEX NCCI_Sales
ON Sales(Amount, SaleDate);
📌 اینجا جدول اصلی دستنخورده میمونه، ولی برای Amount و SaleDate ایندکس ستونی ایجاد میشه.
4️⃣ مزایای Columnstore Index
- 🚀 سرعت بالا در Queryهای تحلیلی (Aggregate, Group By, Join روی دادهی بزرگ).
- 📦 فشردهسازی بالا (تا 10 برابر فضای کمتر).
- 📊 عالی برای سناریوهای Data Warehouse و BI.
5️⃣ معایب / محدودیتها
- عملیات Insert/Update/Delete کمی کندتره (چون دادهها باید به صورت ستونی بازآرایی بشن).
- برای جداول کوچک کارایی زیادی نداره.
- بعضی قابلیتها محدودیت دارن (مثلاً روی Columnstore Index نمیتونی همه نوع Constraint بذاری).
6️⃣ سناریوی واقعی
تصور کن یک جدول Sales داری با 100 میلیون رکورد:
SELECT CustomerID, SUM(Amount)
FROM Sales
GROUP BY CustomerID;
- با Rowstore: ممکنه چند ثانیه یا دقیقه طول بکشه.
- با Columnstore: چون فقط ستونهای
CustomerIDوAmountلود میشن و بقیه ستونها اصلاً نیازی نیست → چند برابر سریعتر میشه.
📌 جمعبندی
- Rowstore (پیشفرض): دادهها ردیفی ذخیره میشن → خوب برای OLTP.
- Columnstore Index: دادهها ستونی ذخیره میشن → خوب برای OLAP (تحلیل حجم بالا).
- Clustered Columnstore Index: کل جدول ستونی ذخیره میشه.
- Non-Clustered Columnstore Index: فقط روی ستونهای خاص نسخه ستونی ساخته میشه.
Accept Cookies
[your-shortcode]