ایندکس گذاری و افزایش سرعت

برای آغاز کار و پیدا کردن یک درک مناسب از ایندکس ­گذاری، اساسی ­ترین گام آشنایی با نحوه ­ی ذخیره اطلاعات در یک بانک اطلاعاتی است

اطلاعات چگونه در SQL Server ذخیره می­ شوند؟

اطلاعات در SQL Server در دو نوع فایل .mdf و .ldf ذخیره میشوند.

فایل .mdf حاوی داده ها، جداول و عناصر بانک اطلاعاتی (فایل داده) و فایل .ldf حاوی اطلاعات تراکنش های انجام شده

روی بانک اطلاعاتی (فایل تراکنش) است. تصویر زیر ببینید.

SQL Server

اطلاعات موجود در فایل های داده، در قالب Page های هشت کیلوبایتی ذخیره می شوند.

هر هشت Pageی که در کنار هم قرار می گیرند به عنوان یک Extent شناخته میشوند. در تصویر زیر می توانید ساختار کلی یک Page را ببینید.

جالب است بدانید SQL Server هربار که برای خواندن اطلاعات به یک Page مراجعه میکند، مجبور است کل اطلاعات آن را بخواند.

بنابراین هرچه اطلاعات موجود در یک Page بیشتر باشد و فضای خالی کمتری داشته باشد، سرعت دسترسی به اطلاعات بیشتر خواهد بود.

به این معنی که SQL Server با خواندن تعداد Pageهای کمتر، اطلاعات بیشتری را میتواند دریافت کند

و این نکته ای است که در طراحی جداول میتواند مورد بررسی قرار گیرد.

هر Page همیشه از سه بخش تشکیل شده استدر تصویرزیر ببینید

SQL Server

هر Page همیشه از سه بخش تشکیل شده است

بخش اول Page Header است. معمولا طول این بخش ۹۶ بایت است و اطلاعاتی مانند: Page Id و Object Id و … را نگه داری میکند.

بخش دوم Payload نامیده می شود که وظیفه ی ذخیره اطلاعات جدول را برعهده دارد.

از آنجایی که ۹۶ بایت فضا برای بخش Header در نظر گرفته شده است،

از ۸۱۹۲ بایت (هشت کیلوبایت) فضای کل Page، ۸۰۹۶ بایت برای این بخش در اختیار شما قرار خواهد گرفت.

 

بخش سوم و آخر در یک Page، Row Offset Array است.

این بخش به ازای هر سطر (رکورد) اطلاعات دو بایت فضا برای نشان دادن محل قرارگیری اطلاعات شما در Page ذخیره میکند.

این بخش به ایندکس گذاری شما کمک خواهد کرد.

وقتی با ساختار کلی ذخیره سازی اطلاعات در SQL Server آشنا شدید، میتوانید به بحث ایندکس ها بپردازید.

. آشنایی با جداول بدون ایندکس یا Heap

برای درک اهمیت ایندکس ­گذاری بهتر است در ابتدای کار با ساختار جداولی که بدون هیچ­گونه ایندکس ­گذاری، ایجاد می­ شوند آشنا شوید.

در این صورت با روش دستیابی SQL Server به اطلاعات این گونه از جداول آشنا خواهید شد.


یک فروشگاه مواد غذایی را در نظر بگیرید.

کالاهای موجود در این فروشگاه به همان ترتیبی که صاحب فروشگاه آن را خریداری کرده است در قفسه ها قرار گرفته اند.

اگر صاحب فروشگاه در هر بار خرید، تعدادی ماکارونی خریداری کند، شما میتوانید ماکارونی ها را در بخش های مختلف فروشگاه پیدا کنید.

چرا که در هربار خریدی که صاحب فروشگاه برای پر کردن اجناس فروشگاه انجام می دهد

ماکارونی ها پس از آخرین کالاهای قرارگرفته در قفسه ها قرار میگیرند.

با این تعریف شاید انتظار فروشگاهی مانند تصویر زیررا داشته باشید.

SQL Server

جداول Heap جداولی هستند که هیچگونه ایندکس گذاری ای در آنها انجام نشده است.

اطلاعات به همان ترتیبی که در این جدول قرار میگیرند،

در Page ها ذخیره و نگهداری میشوند و این بدان معنی است که ذخیره  سازی اطلاعات بدون هرگونه مرتب سازی ای انجام می شود

اگر نگاه دقیقی به تصویر زیر بیندازید، خواهید دید که این فروشگاه ۴ ویژگی دارد که با اولین نگاه می توان آنها را دریافت:

۱- کالاها به صورت تودهای در کنار یکدیگر قرارگرفته اند.

۲- فروشگاه هیچ نظم خاصی ندارد.

۳- هیچ کس از محل دقیق قرارگیری یک کالا مطلع نیست.

۴- برای جست وجو و به دست آوردن یک نوع کالا، باید تمام فروشگاه را جست وجو کرد.

آیا استفاده از چنین فروشگاه هایی به صرفه است؟

و آیا به راحتی و به سرعت میتوانید در این فروشگاه نیازهای خود را تامین کنید؟ حتما پاسخ شما به این دو سوال منفی خواهد بود.

ساختار جداولی که در SQL Server بدون ایندکس گذاری ایجاد میشوند نیز میتواند تا حد بسیار زیادی به این فروشگاه نزدیک باشد.

به این نوع جداول Heap گفته میشود. جدول نمایش داده شده در تصویر زیر یک جدول Heap است.

SQL Server

همانطور که در تصویر زیر نشان داده شده است، این جدول نیز تمام خصوصیات فروشگاهی که پیش از این بیان شد را دارد

و هیچ اثری از نظم و ترتیب در هیچکدام از ستون های این جدول به چشم نمی خورد.

SQL Server برای به دست آوردن یا به عبارتی جست وجوی یک داده مجبور میشود کل رکوردهای این جدول را جست وجو کند

(به این کار در اصطلاح Scan گفته میشود).

جست وجو کردن کل رکوردهای جدول به معنی جست وجوی کل Pageهای مربوط به این جدول خواهد بود.

به چهار دلیل زیر استفاده از جداول Heap در ساختار بانک اطلاعاتی پروژه ها توصیه نمی شوند چراکه در بانک های اطلاعاتی مشکل آفرین و هزینه بر خواهند بود:

۱- اطلاعات در Page ها بدون هیچ ترتیبی ذخیره می شوند.

۲- SQL Server برای جست وجوی یک داده، تمام Pageهای جدول را جست وجو می کند.

۳- منابع زیادی از SQL Server را هدر می دهد.

۴- در عمل Replication، نمیتوان این جداول را Replicate کرد.

ساخت یک جدول Heap:

Create Table tblPerson (
	Id int,
	NationalId varchar (10) not null, 
	Name nvarchar (30) not null, 
	Family nvarchar (35) not null, 
	Phone varchar (10) null, 
	Address nvarchar (max) null) 
<span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start"></span>

اتصالات بدون شرط در SQL Server

در این نوع اتصالات، دو طرف رابطه که همان جداول هستند، بدون هیچ شرطی به‌صورت ضرب کارتزین به یکدیگر متصل می‌شوند.

ادامه مطلب …

تعیین ترتیب اجرای تریگر ها(در اسکیوال سرور)

گاهی اوقات ممکن است برای یک رویداد چند تریگر وجود داشته باشدو ترتیب اجرای آن‌ها حائز اهمیت باشد.در این صورت می‌توان با استفاده از

روال ذخیره‌شده‌ی sp_settriggerorder ترتیب اجرای آن دسته از تریگرهاییکه زمان اجرای آن‌هاAFTER مشخص شده را تعیین کرد.

ادامه مطلب …

نمودار ارتباط موجودیت (ER)

نمودار ER، نموداری است که ارتباط موجودیت‌ها را در سیستم نشان می‌دهد. بنابراین لازم است تا با مفهوم موجودیت یا Entity آشنا شویم.در مدل ER از عناصری به نام موجودیت استفاده می‌شود.

ادامه مطلب …

حذف پایگاه داده

شما با استفاده از این روش ها به سادگی می توانید بانک اطلاهاتی خود را حذف کنید

ادامه مطلب …