اگر یک کلید Unique روی ستونی
ایجاد کنیم آنگاه تنها یک نمونه از مقدار NULL می توانیم
داشته باشیم. ولی در بعضی موارد احتیجاج داریم که یونیک بودن را برای مقادیر
NULL صرف نظر کند و بتوانیم بیش از یک NULL
درج کنیم. بطور مثال جدولی به نام Person داریم که مشخصات
افراد را نگهداری می کند و ستونی به نام "شماره ملی" وجود دارد که Null able
است؛ این ستون چندان اهمیتی در کار ما ندارد و می تواند NULL
باشد ولی برای بحث جامعیت داده ها ما مجبوریم که مقدار این ستون منحصر بفرد باشد.
چون مقدار شماره ملی خاص فرد است.
Filtered Index در نسخه 2008
معرفی شده است. که کاربرد اصلی آن بهینه کردن nonclustered index
هست و مزیت های فراوانی در مقابل full-index دارد. با کمک
این نوع Index ما می توانیم روی یک زیر مجموعه ی محدودی از
رکورد ها شاخص را تعریف کنیم. با این کار حجم اطلاعاتی که در شاخص نگهداری می شود
کمتر از نوع Full آن خواهد بود.
کار خیلی ساده است، کافیه از ماده WHERE
در انتهای تعریف یک INDEX استفاده کنیم. و شاخص را تنها روی
مقادیری که not null هستند تعریف کنیم یعنی:
USE tempdb
CREATE TABLE Person
(National_id CHAR(10) NULL);
CREATE UNIQUE NONCLUSTERED INDEX multi_null
ON Person (National_id)
WHERE National_id IS NOT NULL;
--Done
INSERT INTO Person VALUES(NULL)
--Done
INSERT INTO Person VALUES(NULL)
--Done
INSERT INTO Person VALUES(1234567890)
--Cannot insert duplicate key row in object 'dbo.Person' with unique index 'multi_null'.
INSERT INTO Person VALUES(1234567890)