db indexing
TRANSCRIPT
مقدمه ای بر ساختار فایل و شاخص گذاری
ویرایش سومDatabase Management System کتاب 8فصل دکتر محمود نشاطی
سوال های مهم در این فصل
1 یک )DBMS( چگونه داده های ماندگار Persistent Data را )ذخیره سازی می کند؟
2 چرا هزینه )IOدر عملیات پایگاه داده بسیار مهم است؟ 3 )DBMS چگونه ساختار فایل را انتخاب می کند تا هزینه IO کمینه
شود؟4 )Indexچیست و چگونه از آن استفاده کنیم؟ 5انواع مختلف ایندکس چیست؟ و هر کدام کجا کاربرد دارد؟ )6 چگونه از )Index استفاده کنیم تا کارایی پایگاه داد_ه را بهینه
کنیم؟
نمونهDBMSساختار داخلی یک
Query Optimizationand Execution
Files and Access Methods
Buffer Management
Disk Space Management
Application
SQL :اول زبان queryالی�ه به SQL
کردن parseرا دریاف_ت و پس از نحوه اجرا را مشخص می کند.
:دوم باالتر، الی��ه الی__ه برای را ایجاد می کند.Fileمفهوم
File.مجموعه از صفحات است چند ی_ا ی_ک حاوی ص_فحه ه_ر
رکورد است.
DBMSساختار چند الیه
نمونهDBMSساختار داخلی یک
Query Optimizationand Execution
Files and Access Methods
Buffer Management
Disk Space Management
Application
SQL :وظیف_ه انتقال صفحات الیه س�وم
از حافظ_ه جانب_ی ب_ه حافظ_ه اصلی را به عهده دارد.
:مدیریت فضای روی الی�ه چهارمدیسک را به عهده دارد.
توابعallocate، deallocate، read و writeصفحات
ساختار فایل را فایل در اطالعات__ی رکوردهای گرفت__ن قرار نحوه
می گوییم.ساختار فایل اصطالحا ه_ر نوع س_اختار فای_ل برخی از عملیات روی پایگاه داده
را کارا می کند و برخی دیگر را دشوار می کند. نام« شامل اطالعات__ی رکوردهای کنی__د فرض مثال:
و تولد« »تاری_خ کارمن_د« خانوادگ_ی »نام کارمن_د«، »حقوق کارمند« باشد.
ب_ه صورت اس_اس حقوق ب_ه را کارمندان اگ_ر فهرس_ت نزولی بخواهیم:
ساختار فایل: مرتب بر اساس حقوقهر خط از فایل یک کارمندمزیت، عیب!؟
مثال
را کارمندانی نام اگ__ر سال از بع_د ک_ه بخواهی_م
متول_د شده ان_د باید 1340کل فایل را اسکن کنیم.
با کارمندان حقوق اگ__ر شود، عوض زیاد سرعت باید را رکورده__ا ترتی__ب
مرتب عوض کنیم! باال را شاخ�ص گذاری کم_ک م_ی کند، مشکالت حل کنیم
ذخیره سازی داده روی حافظه ثانویه.در پایگاه داده حجم زیادی از اطالعات ذخیره می شود
داده های باید ماندگار باشد داده ها در حافظه اصلی جا نمی شود. ) آیا این شرط هنوز مهم
است؟(
داده ها را روی حافظه ثانویه ذخیره می کنیم و وقتی پروسس الزمباشد به حافظه اصلی منتقل می کنیم. ) واحد انتقال داده = صفحه،
است.(DBMSپارامتر دیسک(نوارTape)
ذخیره سازی داده روی حافظه ثانویه
)انتقال صفحه از حافظه جانبی به حافظه اصلی ) و بالعکس است.DBMSپرهزینه ترین عملیات در
تعدادPage IO.باید کمینه شود مثال: تفاوتExternal Sorting و Internal Sorting
ذخیره سازی داده روی حافظه ثانویه
فایل
صفحه
رکورد
ذخیره سازی داده روی حافظه ثانویهدیسک
( مهمترین ابزار ذخیره سازی با دسترسی تصادفیrandom access)
.فرض: هزینه واکشی یک صفحه تصادفی ثابت است اگر صفحات را به ترتیب فیزیکی ذخیره شده روی دیسک
بخوانیم، زمان موردنیاز برای خواندن کاهش می یابد. نوار
( .دسترسی به صورت متوالی استSequential ) مناسب برای آرشیو سازی وBackupگیری
در الیه فایل فرض می کنیم، هر رکورد یکrid دارد، که به صورت یکتا آدرس صفحه مرتبط روی دیسک را می
دهد.
ذخیره سازی داده روی حافظه ثانویه
به باش_د، نیاز داشت_ه اگ_ر الی_ه فای_ل فضای جدی_د یک Disk Space Managementالی_ه درخواس_ت
صفحه جدید می دهد. اگ_ر الی_ه فای_ل ی_ک ص_فحه را نیاز نداشت_ه باش_د، آن
آزاد می Disk Space Managementرا از طری_ق کند.
ساختار فایل و شاخص گذاری
در الیه فایل، داده های ذخیره شده، به صورت مجموعهاز رکوردها نمایش داده می شود.
:عملیات در سطح فایلساختن فایل، حذف فایل،درج رکورد، حذف رکورد( اسکنScanدسترسی به همه رکوردها : )
ساختار فایل و شاخص گذاری
الیه فایل، رکوردها را به صورت مجموعه از صفحاتذخیره می کند.
الیه فایل، صفحه های مربوط به هر رابطه را میشناسد.
الیه فایل، فضای خالی هر صفحه مربوط به یک رابطهرا می شناسد.
ساختار فایل و شاخص گذاری
ساختارHeapساده ترین ساختار فایل در ساختارHeap رکوردها به صورت تصادفی در صفحات ،
مربوطه ذخیره می شوند. با داشتنrid می توان صفحه مربوط به رکورد موردنظر را
پیدا کنیم.ساختار شاخص گذاری شده
نوعی ساختار که کارایی برخی از عملیات جستجو را بهبود میدهد.
کلید جستجو هر شاخص برای یک(Search key طراحی )می شود.
ساختار فایل و شاخص گذاری برای ی_ک فای_ل واح_د م_ی توان چن_د نوع شاخص گذاری
ک_ه ه_ر کدام را کلی�د جستجوی داش_ت خاص خودش دارد.
مثال رکورد کارمندانذخیره سازی به صورت شاخص روی تاریخ تولدایجاد شاخص اضافی روی حقوق
ساختار فایل و شاخص گذاری
آشنایی با دو مفهومData Entryرکورد های ذخیره شده در فایل ایندکس :Data Record رکوردهای حاوی داده: مانند رکوردهای کارمندان :
در مثال قبل با داشتنData Entry می توانیم به Data Record دسترسی
پیدا کنیم. :ایده
شاخص را به گونه ای می سازیم که یافتنData Entry با یک شرط مشخص در آن کارا باشد.
بس از یافتنData Entry، Data Record ها را پیدا می کنیم.
شاخص گذاری
روش های مدل کردنData Entry:)روش اول ) خوشه بندی شده
=Data record Data Entryروش دوم
Data Entry = <K, rid<روش سوم
Data Entry = <K, rid list<
روش اول
روش دوم و سوم
مقایسه روش های شاخص گذاری
:در روش اول رکورد های داده ای بر اساس کلید جستجو شاخص در فایل قرار می
گیرند.:در روش دوم و سوم
Data Entry ها به Data Record.ها آدرس می دهند :فایل داریم که رکوردهای داده ای به صورت یکدر روش اول
شاخص گذاری شده نگهداری می شوند. در روش دوم و سوم: فایل شاخص از فایل رکوردهای داده ای
مجزا و مستقل است.
نمایش شاخص خوشه گذاری شده
Index entries
Data entries = Data Record
direct search for
(Indexed Data File)
data entriesCLUSTERED
ها data record ها با ترتیب data entryترتیب یکسان )یا نزدیک به هم( است.
نمایش شاخص خوشه گذاری نشده
(Index File)
(Data file)
Data entries
UNCLUSTERED
ها data record ها با ترتیب data entryترتیب متفاوت است.
Data records
مقایسه روش های شاخص گذاری برای یک فایل با چند شاخص، حداکثر یکی از شاخص ها می تواند
از نوع اول باشد.چرا؟؟؟؟
اول نوع شاخص یکی حداکثر
و دوم نوع شاخصسوم دلخواه تعداد به
Clusteredشاخص خوشه بندی شده )Index)
اگ_ر ی_ک فای_ل ب_ه گون_ه س_اختاردهی شود ک_ه ترتیبdata record ترتی_ب شبی_ه باش_د، شاخص data Entryه_ا ه_ا
نامیده می شود.Clusteredخوشه بندی شده یا
شاخص های نوع اول، طبق تعریفClustered.هستند شاخص های دوم و سومClustered.نیستند
ها با توجه به محدوده Queryدسته بندی جستجو
Range Search Query -جستجوی محدوده 2500 تا 1500مثال: نام کارمندان_ با حقوق بین
را بدهید._ Select name from Employee where salary between 1500 and
2500Equity Search Query -جستجوی برابری
را بدهید.1000مثال: نام کارمندان با حقوق Select name from Employee where salary=1000
Clusteredشاخص خوشه بندی شده )Index)
با استفاده از شاخص خوشه بندی شده، می توانیم را به صورت چشم Range Search Queryکارایی
گیری افزایش دهیم.چرا؟ رکوردهایی که در جواب صدق می کنند در مجاورت هم
ذخیره شده اند. با انتقال تعداد محدودی از صفحات به حافظه، به جواب
می رسیم.
Clustered Indexشاخص خوشه بندی شده
اگر شاخص خوشه بندی نباشد؟ ممک_ن اس_ت ه_ر رکورد جواب، در ی_ک صفحه
مجزا قرار بگیرد. جواب های رکورد تعداد به حال_ت بدتری_ن در
باید صفحه به حافظه منتقل کنیم.IO Costبسیار باال
range-searchمثال کتاب- جستجوی
یک کتاب اخبار را در نظر بگیرید که اخبار در ان به صورت زمانی از قدیمیترین به جدیدترین نوشته شده است.
پاسخ بهrange_search Query:زیر بسیار کارا است را بدهید«1/1/95 تا 1/1/94»همه خبرها بین تاریخ
range-searchمثال کتاب- جستجوی همان کتاب خبر را در نظر بگیرید که صفحات آن بر اساس
نویسنده مرتبط شده باشد.فصل اول خبرهای نویسنده اولفصل دوم خبرهای نویسنده دوم....
پاسخ بهrange_search Query زیر حتی با داشتن index کارا نیست:
تاریخ را بدهید«1/1/95 تا 1/1/94»همه خبرها بین تاریخ94/1/1 11, 154,
344,45394/1/2 99,98,54594/1/3 1,2…95/1/1 45,9999,1000
1
و شدهمقایسه شاخص خوشه گذاری نشده شاخص خوشه گذاری
شدهبرای یک فایل حداکثر یک شاخص خوشه گذاری می توانیم داشته باشیم!
چرا؟بر اساس کدام صفت شاخص خوشه گذاری شده بسازیم؟
داشته نشده شاخص خوشه گذاری به تعداد دلخواه می توانیمباشیم.
برای کتاب اخبار چه شاخص هایی می توانیم داشته باشیم؟
Secondary و Primaryشاخص
:دو نوع تعریف تعریف اول: شاخص های تعریف شده رویPrimary
Key شاخص های Primary.گفته می شوند در غیر این صورت شاخصSecondary.است
را 1تعریف دوم: شاخص های نوع Primary index و می Secondary Index را 3و 2شاخص های نوع
گوییم.
Uniqueشاخص
دو خبر که در یک تاریخ یکسان منتشر شده اندSearch Key یکسان و هستند.duplicateاصطالحا
اگر در یک شاخص گذاریduplicate نداشته باشیم، به شاخص مربوطه Unique Index.می گوییم
تاریخ94/1/1 11, 154, 344,45394/1/2 99,98,54594/1/3 1,2…95/1/1 45,9999,10001
داده ساختارهای شاخص گذاری
:دو روش کلی برای شاخص گذاری داده استفاده می شود استفاده ازHASHING استفاده ازTREE
هدف: با داشتن مقدار »کلید جستجو« چگونه شماره صفحهرکوردهای جواب را پیدا کنیم؟
است.« علی آن ها ناممثال: »رکوردهای دانشجویانی را بیابید که اول مثال: »رکوردهای خبرهایی را بیابید که تاریخ آن ها مربوط به
است.«مهر
Hashشاخص گذاری مبتنی بر
ب_ا اس_تفاده از تاب_عHash م_ی توانی_م رکورد ه_ا را ب_ه گونه ای بچینی_م ک_ه ب_ا داشت_ن کلی_د جس_تجو، ب_ا س_رعت باال به
صفحه مربوط به رکورد دسترسی پیدا کنیم.
Hashشاخص گذاری مبتنی بر
سوال: در مثال کارمندان اگر شاخصHash بر اساس تاریخ تولد های زیر پاسخ Queryکارمندان ساخته شده باشد چگونه به
دهیم؟ متولد شده اند؟«1355»حقوق کارمندانی که در سال تومان حقوق می گیرند؟«2000»تاریخ تولد کارمندانی که 1355 تا 1345»میانگین حقوق کارمندانی که بین سال های
متولد شده اند؟«
Hashingمثال از .فرض کنید مجموعه رکورد ها به شرح زیر باشد
Hashingمثال از صورت ب_ه را رکورده_ا
با شده، بندی خوش__ه زیر Hashاس_تفاده از تاب_ع
در فایل مرتب کنید. باق_ی مانده تاری_خ تولد«
«3به عدد ورودی تابع: تاریخ تولد عدد یک تاب_ع: خروج_ی
3 تا 0صحیح بین تعدادBucket = 3 ها
Hashingمثال از
تابعHash تاریخ تولد
نوع شاخص خوشه بندی شده است یا نه؟
Hashingمثال از
رکوردهای فایل قبل را بر اساس حقوق هم شاخصگذاری کنید.
تابعHash است؟200آیا حقوق مضربی از ،ورودی تابع = حقوقخروجی تابع= بلی، خیر تعدادBucket = 2 ها
Hashingمثال از
آیا می توان شاخص خوشه بندی شده ایجاد کرد؟دو کلید جستجو داریم
1)تاریخ تولد ) خوشه بندی شده -2حقوق -
Hashingمثال از
تابعHash تاریخ تولد
تابعHash
حقوقنوع شاخص حقوق خوشه بندی شده آیا می توانیم بدون افزونگی داده، دو یا است یا نه؟
چند شاخص خوشه بندی شده داشته باشیم؟
Hashingمثال از
.تعداد فیلد های کلید جستج_و می_ تواند بیش_ از یک باشد.مثال: همزمان روی دو یا چند فیلد شاخص گذاری انجام شود
:استفاده عملی به صورت عملی استفاده از شاخص گذاریHashing محدود
است. تنها برایEquity Search Query مناسب است و برای
Range Query.مناسب نیست انتخاب تابعHash.مناسب دشوار است
Hashشاخص گذاری مبتنی بر
مجموعه رکورد ها به چندBucket.تقسیم می شوند هرBucket شامل یک صفحه اصلی، و در صورت نیاز، چند صفحه اضافی
است. به کلید جستجونگاشت Bucket با استفاده از تابع Hash.انجام می شود
اگر شمارهBucket را بدانیم، یافتن صفحه مورد نظر با تعداد محدودی IO امکان پذیر است.
در هنگامInsert هر رکورد در ،Bucket.مربوط به خود درج می شود در هنگامSearch مقدار کلید جستجو را با استفاده از تابع ،Hash به شماره
Bucket.تبدیل می کنیم
Hash index in SQL server SQL server 2014 supports Hash Index The following figure shows three index keys that are mapped to
three different buckets in the hash index. Hash function is fix BUCKET_COUNT is a parameter.
bucket count should be between 1 and 2 times the number of distinct values in the index key.
Hash Indexing is suitable for memory-optimized table. Reference: msdn.microsoft.com/
شاخص گذاری درختی
ساختار درختی یک راهکار جایگزین برای ساختنIndex است.
در این روشData Entry ،ها با توجه به کلید جستجو( ذخیره می شوند.Sortedبه صورت مرتب )
از ساختار درختی برای هدایت جستجو استفاده میشود.
1345 1356
1320 1371
1300 1380
1300<=Y<1380
1371<=Y<13801320<=Y<13711300<=Y<1320
1320<=Y<13451345<=Y<1356 1356<=Y<1371
سطح برگ
A
B
C
L1 L2 L3
هر یک از نود ها در یک صفحه نگهداری می شوند
شاخص گذاری درختی
:الیه برگ در این سطحData Entry.ها قرار می گیرند Data Entry =? Data Record
:مزیت شاخص گذاری درختی به صورت کارا می توانdata entry هایی که در شرط range
Query!صدق می کنند را پیدا کرد متولد شده اند.1362 تا 1345مثال: کارمندانی که بین سال های
1362<Birth Year<1345 ها را پیدا کنیم data entryکافی است صفحه ای از باشد. سپس از لینک های 45که تاریخ تولد بزرگتر از روی برگ حرکت کنیم.
شاخص گذاری درختی
چندPage IOنیاز داریم؟ 1به عمق برگ حاوی اولین پاسخ -2به تعداد برگ های حاوی جواب -
داده ساختار مورد استفاده: درختB+ فاصله ریشه تا هر برگ دلخواه، یکسان است. )ارتفاع
Balanced )
شاخص گذاری درختی
هزینه جستجو در یک درختB کمتر از هزینه جستجوی باینری + شده رکورد ها است.sortروی فایل
هر گره داخلی می تواند تعداد زیادیpointer داشته باشد که ارتفاع درخت را با استفاده از آن کاهش می دهیم.
ارتفاع درختB است4-3+ در عمل حداکثر 20 برگ، ارتفاع درخت باینری = 6^10برای
Binary Tree و B+ Treeمقایسه
=میانگین تعداد زیر نودهای یک نود غیر برگFan out Degree
فرض کنیدFan out = N = و ارتفاع درخت Hتعداد گره های برگ چند تا است؟
N^H اگرFan out =100 و H=4 = میلیون100 تع_داد برگ ها جستجوی باینریlog)10^8( 25، به حداقل IO.نیاز دارد
Fan out= N, Height = H Leaf Node = N^H
...
... ...
تعداد نود ها = N
تعداد نود ها = N^2
مقایسه ساختارهای فایل
مقایسه کارایی عملیات مختلف با استفاده از ساختارهای متنوع)فرض کنید شاخص ها بر اساس کلید های )حقوق و سال تولد:ساختارهای مورد بحث
Heap فایلsort شده شاخص خوشه بندی شده درختی ساختارHeapبا شاخص غیرخوشه ای درختی ساختارHeap با شاخص غیرخوشه ای Hash
مقایسه ساختارهای فایل:عملیاتی که روی فایل ها انجام می دهیم به شرح زیر است
Scan در این فعالیت هدف، انتقال همه رکوردها از حافظه چانبی به Buffer
است.Equity search جستجو با شرط برابری با کلید جستجو -
تومان باشد.750 و درآمد 1345مثال: همه رکوردهایی را بدهید که کارمند متولد .صفحات مربوطه باید بازیابی شوند
Range Query جستجوی محدوده روی کلید جستجو - به بعد باشد.1360مثال: همه رکوردهایی را بدهید که شامل کارمندان متولد سال
Insertدرج رکورد جدید :Deleteحدف رکورد :
مدل سازی هزینه عملیاتمقدار متداو
ل
نام پارامتر
شرح پارامتر
Size /8k
B تعداد صفحات برای ذخیره سازی رکورد ها )بدون اتالف(
- R تعداد رکورد در هر صفحه15 MS D متوسط زمان خواندن/ نوشتن یک صفحه
100 NS
C متوسط زمان الزم برای پردازش یک رکورد
100 NS
H روی Hashمتوسط زمان الزم برای اجرای تابع یک رکورد
100 F B+ Treeتعداد فرزندان نودهای غیر برگ در
Heapبررسی ساختار
scanB)D+RC(B صفحه باید به حافظه منتقل شود B*D هر صفحه شاملR رکورد است که برای پروسس هر رکورد C زمان
B*R*Cالزم است = Equity Search
:0.5اگر جستجو روی کلید کاندید انجام شودB)D+RC( _اگر جستجو جواب نداشته باشد و یا جستجو روی یک صفت
)B)D+RCغیرکلید باشد:
Heapبررسی ساختار
Range Query به بعد 1360همه رکوردهایی را بدهید که شامل کارمندان متولد سال
باشد.B)D+RC(!همه فایل را برای یافتن پاسخ باید جستجو کنیم
Insertکافی است رکورد را به انتهای فایل اضافه کنیم صفحه آخر را به حافظه منتقل کنبد، رکورد را بنویسید؛ صفحه را به دیسک
منتقل کنید.2D+C
Heapبررسی ساختار Delete
+ هزینه جستجو رکورد و انتقال صفحه به حافظهc+ D اگرridرا داشته باشیم
= هزینه جستجو رکورد و انتقال صفحه به حافظهD اگرridرا نداشته باشیم
هزینه را باید با روش هایEquity یا Range.محاسبه کنیم نکته: هزینه عملیاتdelete در پایگاه داده تابع تعداد
شونده است.deleteرکوردهای
جدول هزینه هاFile Type Scan Equity Search Range Search Insert DeleteHeap B(D+RC) 0.5B(D+RC) B(D+RC) 2D+C Search +C+DSortedClustered TreeUnclustered TreeUnclustered Hash
File Type Scan Equity Search Range Search Insert DeleteHeap BD 0.5BD BD 2D Search +DSortedClustered TreeUnclustered TreeUnclustered Hash
Sortedبررسی ساختار
Scan B)D+RC(چرا؟
Equity Searchجستجو روی کلید ترتیب )حداقل اولین کلید( انجام شود
Log B ،جستجو برای یافتن صفحه هدف Log Rجستجو برای یافتن رکورد D Log B + C Log Rاگر بیش از یک رکورد جواب داشته باشیم؟
.جستجو روی کلید ترتیب انجام نشود ترتیب کمکی نمی کند. مانندHeap
Sortedبررسی ساختار Range Query
به بعد باشد.1360همه رکوردهایی را بدهید که شامل کارمندان متولد سال اگر جستجو روی کلید ترتیب انجام شود، هزینه شامل یافتن اولین رکود جواب و در صورت
کردن صفحات بعدی است.fetchلزوم .نکته: هزینه به تعداد رکوردهای جواب بستگی داردD Log B + C Log R + C #matched records
Insert.جایگاه درج رکورد مشخص شود.رکوردهای بعد از رکوردهای جدید یک رکورد جابجا شوند 2( * 0.5B)D+RC()
delete
جدول هزینه هاFile Type Scan Equity Search Range Search Insert DeleteHeap B(D+RC) 0.5B(D+RC) B(D+RC) 2D+C Search
+C+DSorted B(D+RC) D + C Log R D + C Log R +
RC #matched record
Search+B(D+RC)
Search + B(D+RC)
File Type Scan Equity Search Range Search Insert DeleteHeap BD 0.5BD BD 2D Search +DSorted BD *D * D BD + Search BD + Search
Clustered B+ Treeبررسی ساختار آزمایش های تجربی نشان داده است، برای باالنس
حجم یک سوم ، به طور متوسط B+ Treeنگهداشتن صفحات خالی می ماند. پس اگر داده به صورت فشرده
B 1.5 صفحه باشد، در این روشB.صفحه می شود
Scan B)D+RC(*1.5چرا؟
Clustered B+ Treeبررسی ساختار
Equity Searchجستجو روی کلید ترتیب )حداقل اولین کلید( انجام شود
جستجو برای یافتن صفحه هدف، جستجو برای یافتن رکورد
اگر بیش از یک رکورد جواب داشته باشیم؟ .جستجو روی کلید ترتیب انجام نشود
ترتیب کمکی نمی کند. مانندHeap
Clustered B+ Treeبررسی ساختار Range Query
همه رکوردهایی را بدهید که شامل کارمندان به بعد باشد.1360متولد سال
اگر جستجو روی کلید ترتیب انجام شود، هزینه شامل کردن fetchیافتن اولین رکود جواب و در صورت لزوم
های روی pointerصفحات بعدی است. ) با استفاده از برگ ها(
.نکته: هزینه به تعداد رکوردهای جواب بستگی دارد
Clustered B+ Treeبررسی ساختار
Insert.صفحه برگ جایگاه درج رکورد مشخص شود در بیشتر موارد جای درچ شدن یک رکورد جدید وجود دارد، در غیر
باید به روز شود. B Treeاین صورت ساختار
Delete مانند Insert
جدول هزینه هاFile Type Scan Equity Search Range Search Insert DeleteHeap B(D+RC) 0.5B(D+RC) B(D+RC) 2D+C Search
+C+DSorted B(D+RC) D Log B + C Log R D Log B + C Log R
+ RC #matched records
Search+B(D+RC)
Search + BD
Clustered Tree 1.5B(D+RC
Unclustered TreeUnclustered Hash
اندیس گذاری می شود.Clustered، جدول به صورت پیش فرض بر اساس کلید اصلی به صورت sql serverنکته در
جدول هزینه های ساده شده
File Type Scan Equity Search Range Search Insert DeleteHeap BD 0.5BD BD 2D Search +DSorted BD *D * D BD + Search BD + SearchClustered Tree 1.5BD
افزایش یابد!!!404 می تواند تا sql server، Fan-out: در نکته
Clustered B+ Treeبررسی ساختار
Unclustered Treeبررسی ساختار فرض: اندازهdata entry= 0.1 data record اگر تعداد صفحات الزم برایdata record = ها Bباشد تعداد صفحات الزم برایdata entry= 0.15*B تعدادdata Entry = 6.6 = 0.66* 10 در هر صفحه R
Data entries
Data Records
UNCLUSTERED
Unclustered Treeبررسی ساختار
Scan اگر بخواهیم به صورت مرتب شده به رکورد ها دسترسی پیدا
را کال فراموش کنیم.Indexکنیم، بهتر است که هزینه بسیار زیاد هزینه الزم برای خواندنdata entries :
در بدترین حالت برای هرdata entry یک IOالزم داریم
Unclustered Treeبررسی ساختار
Equity Searchبخش های مختلف هزینه
یافتنData Entry= مربوطه یافتنentry هدف در Data Entry = یافتنData Record از روی Data Entry= D += هزینه کلD
:اگر بیش از یک رکورد جواب داشته باشیم در بدترین حالت به ازای هر جواب یکIO.الزم است
Unclustered Treeبررسی ساختار
Search Range Query یافتنData Entry= مربوطه یافتنentry هدف در Data Entry = به تعداد صفحه هایMatch شده در Index، IO.الزم داریم به ازای هر، جواب یکIO.الزم داریم
درصد جدول در جواب 10اگر بیش از Match می شود بهتر است از Index استفاده نکنیم.
Unclustered Treeبررسی ساختار
Insert هزینه درج درheap= 2D+C هزینه جستجو و به روز رسانیIndex =Delete
2D
ی ساده شدهجدول هزینه ها
File Type Scan Equity Search Range Search Insert DeleteHeap BD 0.5BD BD 2D Search +DSorted BD *D * D BD + Search BD + SearchClustered Tree 1.5BD Search + D Search + D
Unclustered Tree BRD (1+) D (#matched records+) D
D(3 + ) Search + 2D
Unclustered Hashبررسی ساختار index+ Heap File
فرض: اندازهData Entry = 0.1 Data Record :فرضoverflow.نداریم 0.125فرض: تعداد صفحات الزم*B = 8فرض: تعداد رکورد های هر صفحهR
Unclustered Hashبررسی ساختار index+ Heap File
Scan هزینه بازیابیData Entryها
0.125B)D+8RC( در بدترین حالت برای هرdata entry یک IO برای بازیابی
Data recordالزم داریم =زمان اجراBR)D+C(
ازHash برای scan.استفاده نمی کنیم
Unclustered Hashبررسی ساختار index+ Heap File
Equity Search هزینه یافتنBucket = جوابH با فرض اینکه هرBucket حاوی یک صفحه است، هزینه واکشی
Data Entry =Dصفحه = 0.5هزینه یافتن رکود جواب(8RC =)4RC هزینه واکشیdata record = D = هزینه کلیH+2D+4RC
Unclustered Hashبررسی ساختار index+ Heap File
Range Search استفاده ازHash index.کمکی نمی کند کل فایلHeap.باید جستجو شود
Insert هزینه درج درHeap = 2D+C هزینه به روزرسانیIndex= H+2D+C
Delete هزینه جستجو درIndex = و فایل داده H+2D+4RC = 2هزینه به روزرسانیD
ی ساده شدهجدول هزینه هاFile Type Scan Equity Search Range Search Insert DeleteHeap BD 0.5BD BD 2D Search +DSorted BD *D * D BD + Search BD + SearchClustered Tree 1.5BD Search + DUnclustered Tree BRD (1+) D (#matched
records+) DD(3 + ) Search + 2D
Hash Index BRD 2D BD 4D Search + 2D
مقایسه ساختارهای فایل
ساختارHeapScan و Insertسریع، جستجو کند است
ساختارSortشده جستجو ازHeap.سریعتر است اما درج بسیار کند است
ساختارClusterشده جستجو + درج و حذف سریع
ساختارUncluster ،جستجوی سریعscan.بسیار کند است
و تنظیم کاراییIndexانتخاب
انتخاب نوعindex ها می تواند در کارایی DB.بسیار موثر باشد اتخابindex ها با توجه به Work Load.انجام می شود به طور کلی استفاده ازIndex باعث می شود، بازیابی اطالعات به
هزینه زیاد می Insertصورت کاراتر انجام شود و در عوض هنگام شود.
Hash IndexEquity Search
Tree IndexEquity Search + Range Search
workloadمفهوم
عملیات و پرس و جوهای مرسوم و با رخداد زیاد در سیستم چیست؟مثال: سیستم آموزشی دانشگاه(1(، درج درس )100( ، درج دانشجو )2) عملیات: درج استاد( دانشجو با نام و نام خانوادگی 100جستجو: دانشجو با شماره دانشجویی ،)
(10(، دانشجو با کد ملی )80)انتخاب_ های طراح
برای کدام رابطه هایDB، Indexتعریف کنیم؟ چه نوعIndex یی استفاده کنیم؟ Hash یا Tree چه نوعIndex یی استفاده کنیم؟ Clustered یا UnClustered
انتخاب های طراحی روش طراحیIndex:
Query.های مهم سیستم را شناسایی کنید نحوه اجرایQuery.را در نظر بگیرید بررسی کنید با اضافه شدنindexجدید، کارایی بهتر می شود؟
در اینجا نحوه اجرا را برای فقط برای یک جدول در نظر می گیریمQuery Evaluation Plan
دقت« اضافه کردنIndex جدید کارایی Insert و update را کاهش_ می دهد.
Trade off.فضای دیسک هم افزایش می یابد
انتخاب های طراحی
Attribute هایی که در where ،به دفعات زیاد قرار می گیرند شدن هستند.Indexکاندید های خوبی برای
– شرط برابریHash Index = شرط جستجوی محدودهTree Index استفاده ازclusteringکارایی جستجوی محدوده را افزایش می دهد
انواعIndexSingle Attribute رکوردها یا مدخل ها بر حسب یک صفت شاخص :
گذاری شده اند.Multi Attribute
انتخاب های طراحی
اگر به طور معمول درwhere چند صفت با هم رخ می دهند می بسازیم.Multi-Attribute را به صورت Indexتوانیم
مثال فرض کنید نام خانوادگی و نام دانشجویان به طور همزمان استفاده شود. در این صورت پیشنهاد می شود، Whereدر
multi-attribute Index.ساخته شود Select * from STT where stname =‘ali’ and stfamily
= ‘hassani’Data entry ها در این صورت ابتدا بر روی نام خانوادگی و
سپس بر روی نام شاخص گذاری شده اند.
-Single و Multi-Attributeمقایسه Attribute index
Single Index
-Single و Multi-Attributeمقایسه Attribute index
Multi Index
انتخاب های طراحی
درmulti Attribute Indexing تقدم صفت ها در where.مهم است
Select * from STT where stfamily =‘اکبری’ and stname =‘علی’
درQuery باال index.مفید است Select * from STT where stname =‘علی’
درQuery باال index.مفید نیست
انتخاب های طراحی
Index هایی را انتخاب کنید که کارایی تعداد بیشتری از query.ها را افزایش دهد
حداکثر یکindex می تواند به صورت Clustered باشد، شاخصی را انتخاب کنید که بیشترین کارایی را
ایجاد کند.
مثال
برای پاسخ بهQuery زیر چه Index.یی را پیشنهاد می کنید Select * from Employee where DOB < 1330
آیاB+ Indexمی تواند مفید باشد؟ چند درصد از رکوردها در شرط صدق می کنند؟1سوال :
درصد است، بهتر است اساسا 90اگر باالی Scan!کنیم آیا 2سوال :Index به صورت clusteredاست؟
کلید جستجوی مرکب
اگر جستجو به صورتDOB= 1330 && salary = باشد400
( کارایی ایندکس روی sal,DOB بهتر از کارایی روی )sal و DOB.است
1330اگر جستجو به صورت<DOB<1340 && 300<salary<400
( ایندکس خوشه بندی شده رویsal,DOB( یا )DOB,sal )بهترین انتخاب است.
اگر جستجو به صورتDOB=30 && 300<salary<400
( ایندکس خوشه بندی شده رویDOB,sal بهتر از )(sal,DOB.است )
Index فقط با دسترسی به Queryپاسخ به
در برخی موارد اگرIndex مناسب داشته باشیم، می توانیم به Query.بدون دسترسی به تاپل های پایگاه داده پاسخ دهیم
مثال Select DOB, count)*( from Employee group by DOB
Index on DOB Select AVG)sal( from Employee DOB = 1330 and
sal between 3000 and 5000 Index on “DOB, salary”
پایان فصل هشتم