آیتم Fill Factor در ایندکس گذاری های sql
سلام به دوستان عزیز
سوالی برام پیش اومده،برای ساخت ایندکسها در sql server در تب option گزینه ای به نام set fill factor وجود داره،این گزینه به چه کار میاد؟این درصدی که براش مشخص میکنیم چیه؟چه ارتباطی با pad index داره؟
ممنون میشم راهنماییم کنید.
1 پاسخ
Fill Factor :
قدری فضای خالی را درانتهای هر صفحه باقی می ماند که از آن برای درج داده های جدید استفاده می شود هرچه مقدار Fill Factor بزرگتر باشد فضای خالی کمتری در انتهای صفحه گذاشته می شود . در صورت پر شدن یک صفحه SQL سرور آن صفحه را تقسیم می کند(تقریبا نصف)
وقتی داده ها عمدتا برای خواندن هستند از مقدار بزرگتری برای Fill Factor استفاده می کنیم . ( یعنی فضای خالی کمتر ) یعنی داده ها از صفحات کمتری خوانده می شوند .
وقتی حجم زیادی از داده های جدیدی برای درج وجود دارد . از مقدار کوچکتری برای Fill Factor استفاده می کنیم . این مقدار موجب کاهش تقسیم صفحات و افزایش کارایی نوشتن داده های جدید می شود .
به عبارتی بهتر میتوان گفت:
Set Fill Factor: يك مقدار درصدي ميباشد. اگر 100 باشد، Pageهاي جدول كاملاً پر ميشوند. بنابراين احتمال بروز Page Split در Table افزايش مييابد كه باعث كند شدن عمليات insert و update و افزايش سرعت select ميشود. اما اگر مثلاً 1 باشد، بيشترين فضاي خالي كه توسط SQL محاسبه ميشود به Pageهاي Table اختصاص داده ميشود و احتمال بروز Page Split كاهش مييابد و سرعت insert و update افزايش يافته، اما چون دادهها در Pageهاي بيشتري ذخيره ميشوند، سرعت جستجو كم ميشود. در دو زمان بهتر است كه اين مقدار برابر با 100 باشد: يكي زماني كه اطلاعات ما فقط خواندني باشند يعني فقط زماني كه از اطلاعات گزارشگيري كنيم و ديگر زماني كه كليد اصلي ما AutoIncrement باشد.
در مورد Pad index:
اگه با درخت آشنایی داشته باشید ، این % میگه که وقتی که چند درصد یه ریشه پر شد ؛ یک نود جدید اظافه کنه.
مثلا اگه بذاری 80% که خوبه ، باعث میشه چند وقت بعد که میخواد به اون پیج در اون قسمت دیتا اظافه کنه ، از اون 20% استفاده کنه.
یعنی باید بدونی پیج چیه و چه جوری پر میشه.
و اگه یه جدول فقط خوندنی باشه 100% خوبه ؛ چون همه ی دیتاها پشت سر هم هستند ، و سریع تر خونده میشوند.
حال یه گزینه هست که میگه در این درخت ؛ فقط در ( منظور از درخت leaf Page هستش ) ، فقط در ریشه ها ننویس ؛ بلکه در کل درخت بنویس ، در کل طبقاتش.
عقلانا این امر باید باعث بشه که ایندکسها کمتر فضا بگیرند.