محتویات سایت
        برچسب های محبوب 








 
   استفاده از Filtered Index برای داشتن ستون منحصر بفرد با چند مقدار NULL
 
   SQL Server
   ۵۵۰۷
   این مقاله حاوی فایل ضمیمه نمی باشد
   محمد سلیم آبادی
   ۱۳۸۹/۴/۲۸
نسخه قابل چاپ نسخه قابل چاپ

اگر یک کلید 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)