خانه > Persian Contents, SQL Server, T-SQL > ستونهای پراکنده (Sparse)

ستونهای پراکنده (Sparse)

ستونهای پراکنده، ستونهایی هستند که برای ذخیره سازی NULL ها بهینه شده اند. برای تعریف یک ستون به عنوان Sparse ، مشخصه های آن را به عنوان بخشی از تعریف ستون مشخص کنید. Sparse ها هیچ فضایی را برای NULL مصرف نمیکنند، مطابق با انواع با طول ثابت; اگرچه وقتی یک ستون به عنوان sparse مشخص میشود، ذخیره مقادیر غیر Null از همیشه پر هزینه تر میشود. بنابراین شما فقط باید زمانی یک ستون را از نوع Sparse تعریف کنید که درصد زیادی از اطلاعات آن Null باشد. کتابهای online مربوط به SQL Server پیشنهاداتی در این زمینه دارد که چه مقدار از داده ها از هر نوع باید null باشد تا استفاده از sparse برای آن ستون مفید باشد.
Query زدن و پر کردن ستونهای sparse مانند ستونهای معمولیست با یک تفاوت که در جلوتر بیان خواهد شد. به عنوان مثال کد زیر یک جدول با نام T1 در tempdb (برای تست) میسازد، سه تا از ستونها با مشخصه sparse علامت گذاری میشوند، یک زوج از سطرها در آن insert میشوند و روی جدول  query زده میشود :

USE tempdb;
IF OBJECT_ID(‹dbo.T1›, ‹U›) IS NOT NULL DROP TABLE dbo.T1;
CREATE TABLE dbo.T1
(
  keycol INT                   NOT NULL PRIMARY KEY,
  col1   VARCHAR(20)           NOT NULL,
  col2   INT            SPARSE     NULL,
  col3   CHAR(10)       SPARSE     NULL,
  col4   NUMERIC(12, 2) SPARSE     NULL
);
INSERT INTO dbo.T1(keycol, col1, col2) VALUES(1, ‹a›, 10);
INSERT INTO dbo.T1(keycol, col1, col4) VALUES(2, ‹b›, 20.00);
 
SELECT keycol, col1, col2, col3, col4
FROM dbo.T1;

محدودیتهای زیادی برای استفاده از ستونهای Sparse موجود است که بحث در رابطه با آنها در اینجا نمیگنجد.
SQL Server 2008 به شما این اجازه را میدهد که مجموعه ای از ستونها که تمامی ستونهای sparse یک جدول را در یک ستون XML واحد ترکیب میکند تعریف کنید. شما ممکن است که بخواهید به این گزینه، وقتیکه تعداد زیادی از ستونهای sparse را در جدولتان دارید (بیشتر از ۱۰۲۴)  فکر کنید و کار کردن روی آنها به صورت شخصی ممکن است طات فرسا باشد.
برای تعریف یک مجموعه از ستونها(column set)، عبارت زیر را به عنوان بخشی از عبارت CREATE TABLE مشخص کنید:

<column_set_name> XML column_set FOR ALL_SPARSE_COLUMNS

به عنوان مثال، کد زیر جدول T1 را مجددا با یک مجموعه ستون با نام cs میسازد:

IF OBJECT_ID(‹dbo.T1›, ‹U›) IS NOT NULL DROP TABLE dbo.T1;
CREATE TABLE dbo.T1
(
  keycol INT                   NOT NULL PRIMARY KEY,
  col1   VARCHAR(20)           NOT NULL,
  col2   INT            SPARSE     NULL,
  col3   CHAR(10)       SPARSE     NULL,
  col4   NUMERIC(12, 2) SPARSE     NULL,
  cs     XML column_set FOR ALL_SPARSE_COLUMNS
);

شما همچنین میتوانیداز کد مشابهی که قبلتر استفاده شده برای insert سطرها در جدول و query زدن روی آن استفاده کنید :

INSERT INTO dbo.T1(keycol, col1, col2) VALUES(1, ‹a›, 10);
INSERT INTO dbo.T1(keycol, col1, col4) VALUES(2, ‹b›, 20.00);

SELECT keycol, col1, col2, col3, col4
FROM dbo.T1;

اما شما میتوانید روی column set با استفاده از اعمال XML به جای اعمال رابطه ای  کار کنید. به عنوان مثال، کد زیر یک سطر با استفاده از column set در جدول درج میکند :

INSERT dbo.T1(keycol, col1, cs)
  VALUES(3, ‹c›, ‹<col3>CCCCCCCCCC</col3><col4>30.00</col4>›);

NULL برای ستونی که در مقدار XML نیامده است در نظر گرفته میشود که در این مثال col2 است.
دقت کنید که اگر شما یک column set در جدول تعریف کنید، SELECT * مقادیر مشابه SELECT که در آن تمام ستونها به صورت واضح نام برده شده اند را بر نمیگرداند. SELECT * تمام ستونهای sparse را به عنوان یک مقدار XML در column set برمیگرداند. برای نمایش این، کد زیر را اجرا کنید :

SELECT * FROM dbo.T1;

این کد خروجی زیر را برمیگرداند:

keycol      col1       cs
———– ———- ——————————————
1           a          <col2>10</col2>
2           b          <col4>20.00</col4>
3           c          <col3>CCCCCCCCCC</col3><col4>30.00</col4>

اگر شما به صورت صریح ستونها را در عبارت SELECT لیست کنید، تمام ستونهای نتیجه به عنوان مقادیر رابطه ای باز گردانده میشوند.
خصیصه جدید دیگری که میتوانند در مقارنه با ستونهای sparse استفاده شوند اندیسهای فیلتر شده (filtered index) هستند. این خصیصه در بخش بعدی توضیح داده خواهد شد.

دسته‌ها:Persian Contents, SQL Server, T-SQL
  1. سالار
    ژانویه 5, 2009 در 9:34 ب.ظ.

    سلام و درود به تو دوست عزیزهیچ فکر میکردی به این زودی سایتتبازدید کننده داشته باشهولی من اومدم و دلم می خواد دوستامم بیاناگر لطف کنی لینک منو تو سایتت بزاری بهت قول میدم زود لینکتو به سایتم اضافه کنم حالا اگر لطف کنی ممنون میشم http://linkche.persianblog.ir لینک بازیمسعود جان منتظرماراستی نظرتم در مورد سایت ما بگودر ضمن اگه همراه ایمیل آدرس سایتت رو همبرام بزاری  ممنون میشم

  2. امير زماني
    ژانویه 18, 2009 در 1:12 ق.ظ.

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

  1. No trackbacks yet.

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

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

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

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

تصویر توییتر

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

عکس فیسبوک

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

عکس گوگل+

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

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

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