خانه > Persian Contents, SQL Server > اندیسهای فیلتر شده و آمار

اندیسهای فیلتر شده و آمار

SQL Server 2008 اندیسهای فیلتر شده و آمار را معرفی کرد. شما اکنون میتوانید یک اندیس گروهبندی نشده بر اساس یک گزاره بسازید، و فقط زیرمجموعه ای از سطرها برای اینکه گزاره در اندیس B-Tree ذخیره شده صحیح بماند، موجودند. به همین نحو، شما میتواند به صورت دستی بر اساس یک گزاره آمار بسازید. بهینه ساز برای زمانی که چنین اندیسهای فیلتر شده و آماری به صورت منطقی استفاده میشوند مفید هستند.
اندیسهای فیلترشده با طراحی خوب میتوانند کارایی و کیفیت طرح را بالا ببرند زیرا آنها از اندیسهای فیلتر نشده کوچکترند. همچنین، آمار فیلتر شده – خواه به صورت خودکار برای یک اندیس فیلتر شده ساخته شده باشد خواه به صورت دستی – از آمار فیلترنشده دقیقترند زیرا آنها نیاز دارندتنها زیرمچموعه ای از سطرهای جدول را کاور کنند.
شما همچنین میتوانید هزینه نگهداری اندیس را به دلیل موجود بودن اطلاعات کمتر جهت نگهداری در اندیسهای فیلتر شده کاهش دهید. این شامل تغییرات در اندیس، بازسازیهای اندیس، و هزینه به روزرسانی آمار میشود. اندیسهای فیلتر شده همچنین به صورت واضح هزینه های storage را کم میکند.
اجازه بدهید نگاهی به چند مثال درباره اندیسهای فیلتر شده بیندازیم. کد زیر یک اندیس روی CurrancyRateID در جدول Sales.SalesOrderHeader میسازد که فیلتر آن نمیگذارد NULL ها وارد شوند :

USE AdventureWorks;
GO
CREATE NONCLUSTERED INDEX idx_currate_notnull
  ON Sales.SalesOrderHeader(CurrencyRateID)
  WHERE CurrencyRateID IS NOT NULL;

نظر به فیلترهای query ، کنار گزاره  IS NULL  که به صریحا به دنبال مقادیر NULL میگردد، تمام گزاره های دیگر NULL ها را رد میکنند، بنابراین بهینه ساز میفهمد که پتانسیل اینکه از اندیس استفاده شود وجود دارد. برای مثال، طرح query زیر نشان میدهد که اندیس استفاده شده است :

SELECT *
FROM Sales.SalesOrderHeader
WHERE CurrencyRateID = 4;

ستون CurrencyRateID درصد زیادی از NULL ها را در خود دارد، بنابراین این اندیس اساسا حافظه کمتری برای ذخیره کردن نسبت به یک اندیس فیلتر نشده در یک ستون مشابه مصرف میکند. شما همچنین میتوانید از این چنین اندیسهایی در ستونهای sparse استفاده کنید.
کد زیر یک اندیس فیلتر نشده روی ستون Freight میسازد، سطرهایی که مقدار Freght در آنها بزرگتر یا مساوی 5000.00 باشد فیلتر میشوند :

CREATE NONCLUSTERED INDEX idx_freight_5000_or_more
  ON Sales.SalesOrderHeader(Freight)
  WHERE Freight >= 5000.00;

بهینه ساز ملاحظه میکند استفاده یک اندیس وقتی فاصله فرعی یک اندیس ورودی فیلتر شده مورد نیاز است آن را فیلتر میکند :

SELECT *
FROM Sales.SalesOrderHeader
WHERE Freight BETWEEN 5500.00 AND 6000.00;

اندیسهای فیلتر شده همچنین میتوانند به عنوان unique تعریف شوند و یک عبارت INCLUDE داشته باشند.

دسته‌ها:Persian Contents, SQL Server
  1. حسین شرفی
    ژانویه 27, 2009 در 3:39 ب.ظ.

    وبلاگ بسیار مفیدی دارین. تبریک میگم بهتون..

  2. امير زماني
    ژانویه 29, 2009 در 11:28 ب.ظ.

    ممنون استفاده خوبي رو از اين مقاله شما داشتيم ؛ بر خودم لازم دانستم که از زحمات شما تشکر کنم .

  3. مسعود رمضانی
    ژانویه 30, 2009 در 6:26 ب.ظ.

    از لطف شما دوستان عزیز متشکرم. امیدوارم بتوتم مطالب بهتری بنویسم.

  4. علی
    ژانویه 31, 2009 در 2:16 ب.ظ.

    سلام دوست عزیز سایت بسیار قشنگ،جذاب وپرمحتوایی دارید.ما نيز وبلاگی برای دانلود و مطالب جالب خواندنی و ….. راه اندازی کرده ايم .خوشحال ميشويم اگر به وبلاگ ما بيای ونظرت را برايمان بزاری.ممنون.http://luxe.iranblog.com

  1. No trackbacks yet.

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: