חישוב ואופטימיזציה של שאילתות חלק 1

Slides:



Advertisements
Similar presentations
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
Advertisements

A. Frank File Organization Indexed-Sequential File Measurements Thanks to Tamar Barnes.
Presentation by Dudu Yanay and Elior Malul 1.  מה משותף לכל אלגוריתם המשתמש ב -Bucket Elimination: ◦ נתון מודל הסתברותי ורשת ביסיאנית מתאימה. ◦ נתונה.
אופטימיזציה של שאילתות
מערכות הפעלה ( אביב 2009) חגית עטיה © 1 מערכת הקבצים  מבוא : מטרות מערכת קבצים  מנשק המשתמש : פעולות על קבצים, ארגון קבצים, הגנה  תכונות של דיסקים.
1 חישוב של אופרטורים רלציוניים Evaluation of Relational Operators.
A. Frank File Organization File Organization Measures.
דוד שוורץ, עידן זק, נטע צור וחיה כהן. הפונקציונאליות : המשתמש יבחר קובץ שעליו הוא רוצה לבצע את האנליזה, וילחץ עליו עם כפתור ימני בעכבר. יפתח תפריט ובו.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
תרגול 8 עצי B+ אינדקס משני.
A. Frank File Organization קובץ ישיר מתקדם Advanced Direct File.
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
שאלות חזרה לבחינה. שאלה דיסקים אופטיים מסוג WORM (write-once-read-many) משמשים חברות לצורך איחסון כמויות גדולות של מידע באופן קבוע ומבלי שניתן לשנותו.
מערכות הפעלה ( אביב 2004) חגית עטיה © 1 מימוש מערכת הקבצים  תכונות של דיסקים.  מימושים בסיסיים.  קצת על מימושים מתקדמים.  אמינות מערכת הקבצים.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
מערכות הפעלה ( אביב 2008) חגית עטיה © 1 מימוש מערכת הקבצים  תכונות של דיסקים.  מימושים בסיסיים.  קצת על מימושים מתקדמים.  אמינות מערכת הקבצים.
A. Frank File Organization Indexed-Sequential File Introduction Thanks to Tamar Barnes.
1 Data Structures, CS, TAU, Splay Tree Splay Tree  מימוש של עץ חיפוש בינארי  מטרה לדאוג ל- Amortized Time  פעולה בודדת יכולה לקחת O(N)  אבל כל רצף.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
A. Frank File Organization Sequential File Measures.
A. Frank File Organization Pile File Measures. 2 A. Frank Steps in analysis of file organization בהערכת מבנה קובץ, נתייחס ל - 6 שלבים / צעדים : 1. תאור.
Data Structures, CS, TAU, Splay Tree 1 Splay Tree - עץ חיפוש בינארי - מטרה לדאוג ל - Amortized Time - פעולה בודדת יכולה לקחת O(N) - אבל כל רצף M פעולות.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
1 חישוב ואופטימיזציה של שאילתות חלק 2 Query Evaluation and Optimization Part 2.
קובץ רב-אינדקס Multi-Indexed File
ערמות ; מבני נתונים 09 מבוסס על מצגות של ליאור שפירא, חיים קפלן, דני פלדמן וחברים.
מערכות הפעלה ( אביב 2009) חגית עטיה ©1 מערכת קבצים log-structured  ה log הוא העותק היחיד של הנתונים  כאשר משנים בלוק (data, header) פשוט כותבים את הבלוק.
A. Frank File Organization Introduction to Overflow Thanks to Tamar Barnes.
תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
A. Frank File Organization Various Parameter Issues.
תרגול 9 אלגברה רלציונית.
תרגול 7 עצי B
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
A. Frank File Organization Transfer Time/Rate Parameters.
Data Structures, CS, TAU, Perfect Hashing 1 Perfect Hashing בעיה : נתונה קבוצה S של n מפתחות מתחום U השוואה ל - Hash : * טבלה קבועה (Hash רגיל - דינאמי.
Remember Remember The 5 th of November. תרגול 2 קובץ סדרתי.
1 Data Structures, CS, TAU, Perfect Hashing בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hash רגיל - דינאמי) * רוצים זמן קבוע.
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א מודל הלמידה מדוגמאות Learning.
עקרון ההכלה וההדחה.
יחס סדר חלקי.
מערכות הפעלה ( אביב 2006) חגית עטיה © 1 סיכום הקורס.
מערכת הקבצים : יסודות  מבוא : מטרות מערכת קבצים  מנשק המשתמש : פעולות על קבצים, ארגון קבצים, הגנה  תכונות של דיסקים.  מימושים : בסיסיים וקצת על מימושים.
1 חישוב ואופטימיזציה של שאילתות חלק 1 Query Evaluation and Optimization Part 1.
1 חישוב של אופרטורים רלציוניים Evaluation of Relational Operators.
Markov Decision Processes (MDP) תומר באום Based on ch. 14 in “Probabilistic Robotics” By Thrun et al. ב"הב"ה.
A. Frank File Organization Introduction to Pile File.
מימוש מערכת הקבצים  תכונות של דיסקים.  מימושים בסיסיים.  קצת על מימושים מתקדמים.  אמינות מערכת הקבצים.
עצים בינאריים - תזכורת דרגת צומת שורש עלה צומת פנימי מרחק בין 2 צמתים
מתמטיקה בדידה תרגול 2.
A. Frank File Organization Hardware Size Parameters.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
Safari On-line books. מה זה ספארי ספארי זו ספריה וירטואלית בנושא מחשבים היא כוללת יותר מ כותרים כל הספרים הם בטקסט מלא ניתן לחפש ספר בנושא מסוים.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
1 ׃1998 Morgan Kaufmann Publishers פקודת ה- jump 4 bits 26 bits 2 bits 00 : כתובת קפיצה במילים : כתובת קפיצה בבתים … …
Storage and Indexing February 26 th, 2003 Lecture 19.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Chapter 11: File System Implementation.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Tirgul 12 Trees 1.
מבוא למדעי המחשב סיבוכיות.
אינדקסינג והשינג (indexing & hashing)
SQL בסיסי – הגדרה אינדוקטיבית
תירגול 14: מבני נתונים דינאמיים
עבודה עם נתונים באמצעות ADO.NET
ממשקים - interfaces איך לאפשר "הורשה מרובה".
Data Structures, CS, TAU, Splay Tree
Based on the lecture notes of Prof. Sagiv
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
Computer Architecture and Assembly Language
Presentation transcript:

חישוב ואופטימיזציה של שאילתות חלק 1 חישוב ואופטימיזציה של שאילתות חלק 1 Query Evaluation and Optimization Part 1

הקדמה: הצגת הבעיה והגורמים המשפיעים הקדמה: הצגת הבעיה והגורמים המשפיעים

המטרה: חישוב שאילתות בצורה יעילה ככל האפשר המטרה: חישוב שאילתות בצורה יעילה ככל האפשר הבעיה: כמות הנתונים גדולה מאוד אי אפשר לקרוא את כל הנתונים בבת אחת לזיכרון הפנימי ואז להתחיל בחישוב צריך לחלק את החישוב לשלבים – בכל שלב: קוראים חלק מהנתונים לזיכרון הפנימי מחשבים חלק מהתוצאה לפי הנתונים בזיכרון הפנימי כותבים לדיסק את החלק של התוצאה שחושב עוברים לשלב הבא

הזמן הנדרש ל- I/O הנו הגורם העיקרי המשפיע על זמן החישוב של שאילתה החישוב המתבצע ע"י ה- CPU על הנתונים הנמצאים בזיכרון הפנימי אינו מסובך הקריאה מהדיסק והכתיבה לדיסק הנם איטיים (לפחות) פי אלף מהפעולות המתבצעות בזיכרון הפנימי לפיכך, הזמן הנדרש לקריאה מהדיסק ולכתיבה על הדיסק הנו הגורם העיקרי המשפיע על זמן החישוב של שאילתות

הגורמים העיקריים המשפיעים על הזמן הנדרש ל- I/O ארגון הנתונים על הדיסק השיטה בה מבצעים כל אחת מהפעולות קיימות מספר שיטות שונות לביצוע פעולת הצירוף (כנ"ל לגבי פעולת הבחירה) הזמן הנדרש ל- I/O תלוי בשיטה התוכנית שנבחרה לחישוב השאילתה כולה, קרי השיטה שנבחרה לביצוע כל אחת מהפעולות הסדר שנבחר לביצוע הפעולות

הנושאים העיקריים שנלמד כיצד מאורגנים נתונים על הדיסק וכיצד מבצעים פעולות קלט-פלט (I/O) שיטות לחישוב כל אחת מהפעולות האלגבריות דגש מיוחד על שיטות לחישוב הצירוף, שהיא הפעולה היקרה ביותר והמורכבת ביותר אלגוריתם לאופטימיזציה של שאילתה, שמוצא את השיטה האופטימלית לביצוע כל אחת מהפעולות, ואת הסדר המהיר ביותר לביצוע הפעולות

דוגמה R(A,B) ⋈ S(B,C) ⋈ T(C,D) צירוף הוא אסוציאטיבי, לכן יש שתי אפשרויות לחישוב הביטוי הנ"ל: R(A,B) ⋈ (S(B,C) ⋈ T(C,D)) (R(A,B) ⋈ S(B,C)) ⋈ T(C,D) צירוף הוא גם קומוטטיבי, לכן יש אפשרות נוספת (R(A,B) ⋈ T(C,D)) ⋈ S(B,C) מהי האפשרות המהירה ביותר?

המשך הדוגמה כאמור יש 3 אפשרויות לסידור 2 פעולות צירוף R(A,B) ⋈ (S(B,C) ⋈ T(C,D)) (R(A,B) ⋈ S(B,C)) ⋈ T(C,D) (R(A,B) ⋈ T(C,D)) ⋈ S(B,C) חלק מהגורמים המשפיעים על הסדר האופטימלי ארגון היחסים על הדיסק גודל תוצאת הביניים עדיף לבצע תחילה צירוף שהתוצאה שלו היא יחס קטן ככל האפשר

שיטות עיקריות לחישוב הצירוף של שני יחסים שיטות עיקריות לחישוב הצירוף של שני יחסים צירוף היא הפעולה האלגברית היקרה ביותר וקיימות עבורה מספר שיטות חישוב שונות: Block Nested-Loops Join Index Nested-Loops Join Sort-Merge Join Hash Join בהמשך, נתאר כל אחת מהשיטות הללו כמו כן, נתאר שיטות לחישוב הפעולות האלגבריות האחרות

דוגמה לבעיית האופטימיזציה עבור R(A,B) ⋈ S(B,C) ⋈ T(B,D) צריך לבחור שיטה מתאימה לכל אחת משתי פעולות הצירוף אין צורך לבחור אותה שיטה לשתי הפעולות סדר מתאים לביצוע הפעולות יש מספר רב של אפשרויות לבחור מתוכן הבחירה של השיטה לכל פעולה עשויה להיות תלויה בסדר הפעולות השיטה האופטימלית לחישוב הצירוף בין R לבין S עשויה להיות תלויה בשאלה האם צירוף זה מתבצע ראשון או שני

מדוע אופטימיזציה היא חשובה? בין התוכנית האופטימלית לחישוב שאילתה לבין תוכנית גרועה לחישוב אותה שאילתה יכול להיות הבדל עצום שעות לעומת שניות ואולי אפילו הבדל גדול יותר לא כל כך חשוב לבחור את התוכנית המהירה ביותר – חשוב להימנע מבחירת תוכנית גרועה

ארגון הנתונים על הדיסק, מבנה הדיסק ואופן הביצוע של פעולות I/O

אחסון יחסים יחסים מאוחסנים בקבצים על דיסקים דיסק מורכב מבלוקים (דפים) בעלי גודל אחיד בלוק חייב להיקרא או להיכתב בשלמותו הזמן לקריאת או כתיבת בלוק אינו אחיד ותלוי במיקום הבלוק על הדיסק ובמצב הדיסק כלומר, היכן נמצאת הזרועה יחסית למיקום הבלוק הקריאה והכתיבה מדיסק הנם איטיים לפחות פי אלף מקריאה וכתיבה מהזיכרון הפנימי

הנחות מפשטות מניחים זמן קבוע לקריאה או כתיבה של בלוק בלוק טיפוסי מכיל בין 1K ל- 4K בתים (bytes) כאמור, המחיר של ביצוע שאילתה הנו הזמן הנדרש לקריאה וכתיבה מהדיסק, תוך התעלמות מהזמן שלוקחות פעולות ה- CPU זאת הנחה סבירה, כי פעולות הדיסק לוקחות הרבה יותר זמן וניתנות לביצוע במקביל לפעולות ה- CPU

אחסון יחס כקובץ כל יחס מאוחסן כקובץ נפרד קובץ בנוי מבלוקים (הנקראים גם דפים) בכל בלוק רשומות רבות עשרות רשומות בבלוק בהחלט אפשרי פעולה על רשומה מתבצעת ע“י קריאת הבלוק המכיל את הרשומה לזיכרון הפנימי, ביצוע הפעולה, וכתיבת הבלוק בחזרה לדיסק

אחסון רשומות בבלוק רשומות יכולות להיות באורך קבוע או באורך משתנה שיטת האחסון צריכה לתמוך בביצוע יעיל של מציאת רשומה בתוך בלוק ניצול מקום המתפנה ממחיקת רשומות

הרעיון העיקרי של ארגון רשומות בבלוק הרעיון העיקרי של ארגון רשומות בבלוק רשומה מזוהה ע"י RID (Record ID), המורכב ממספר הבלוק וממספר הרשומה בתוך הבלוק בסוף הבלוק יש מערך האומר היכן מתחילה כל רשומה הנמצאת בבלוק הערה: ה- RID של רשומה יכול להופיע במקומות רבים במסד – בכל מקום שבו יש הפניה או התייחסות לרשומה לכן, אי אפשר לשנות את ה- RID (אלא במחיר מאוד יקר)

הדגמה של ארגון רשומות בבלוק Rid = (i,N) Page i Rid = (i,2) Rid = (i,1) Pointer to start of free space 20 16 24 N N … 2 1 # slots SLOT DIRECTORY אפשר להזיז את הרשומות בתוך הבלוק בלי לשנות את ה- RID שלהן 12

חוצץ (Buffer) חלק מהזיכרון הפנימי מוקצה לחוצץ, שלתוכו נקראים בלוקים מהדיסק תוכניות האפליקציה פועלות על הבלוקים (דפים) הנמצאים בחוצץ כאשר מסתיים השימוש בבלוק הנמצא בחוצץ, ניתן לנצל את מקומו לטובת בלוק אחר אם הבלוק השתנה בזמן שהיה בחוצץ, צריך לכתוב אותו לדיסק לפני שמפנים את מקומו לטובת בלוק אחר

ניהול חוצץ Data must be in RAM for DBMS to operate on it Page Requests from Higher Levels BUFFER POOL disk page free frame MAIN MEMORY DISK choice of frame dictated by replacement policy DB Data must be in RAM for DBMS to operate on it Table of <frame#, pageid> pairs is maintained 4

MRU (Most Recently Used) כיצד מחליטים איזה בלוק יפנה את מקומו? (מדיניות החלפה – Replacement Policy) LRU (Least Recently Used) – מחליפים את הבלוק שנעשה בו שימוש הכי רחוק בעבר מדיניות מקובלת בניהול זיכרון וירטואלי ע"י ה- OS MRU (Most Recently Used) לעיתים מדיניות זאת טובה יותר, למשל במעבר סדרתי על קובץ, כאשר צריך לעבור על הקובץ באופן סדרתי מספר פעמים מספר הבלוקים בחוצץ קטן ממספר הבלוקים בקובץ

ניתן להשתמש במערכת ההפעלה לניהול החוצצים, אבל מערכות לניהול מסדי נתונים מעדיפות לנהל את החוצצים בעצמן, כי כך קל יותר להשיג תאימות של ה- DBMS למספר מערכות הפעלה שונות יש היבטים שלא קיימים במערכות הפעלה ומצריכים טיפול מיוחד תוכניות שרצות במקביל ומשתמשות באותו בלוק מדיניות החלפה שונה מזו שמתאימה לזיכרון וירטואלי קריאה מקדימה של בלוקים לתוך החוצץ

קריאה מקדימה של בלוקים לתוך החוצץ קריאה מקדימה של בלוקים לתוך החוצץ כאמור, ניתן לבצע פעולות I/O במקביל לחישובים המבוצעים ע"י ה- CPU אם בתוכנית לחישוב שאילתה הוחלט שיש לעבור על קובץ באופן סדרתי, אז אפשר לקרוא בכל שלב מספר בלוקים לתוך החוצץ (בהתאם לגודל החוצץ), כאשר באותו הזמן ה- CPU פועל על הבלוקים שנקראו בשלב הקודם

סוגי קבצים

סוגי קבצים לאחסון יחסים קובץ ערמה (Heap file) הרשומות מאוחסנות (ללא מיון) בבלוקים, שמשורשרים זה לזה קובץ ממוין (Sorted file) טוב לשליפת כל הרשומות לפי סדר המיון או למציאת הרשומות בטווח מסוים של ערכים קובץ ערבול (Hash file) פונקצית הערבול מקבלת ערכים עבור המפתח ומוצאת רשומות עם ערכים אלה

הפעולות על קובץ הוספת או מחיקת רשומה בודדת חיפוש לפי ערך עבור המפתח הפעולות על קובץ הוספת או מחיקת רשומה בודדת חיפוש לפי ערך עבור המפתח קובץ ערמה מוסיפים בסוף הקובץ קובץ ממוין הקובץ ממוין לפי המפתח מכווצים את הקובץ לאחר מחיקה קובץ ערבול אין overflow, 80% תפוסה

המאפיינים של קובץ שקובעים את הזמן הנדרש לביצוע הפעולות מספר הבלוקים של הקובץ – B מספר הרשומות בבלוק – R הזמן (הממוצע) לקרוא בלוק – D בעזרת הפרמטרים האלה נקבע את הזמן (של פעולות ה- I/O) הנדרש לביצוע הפעולות בסוגי הקבצים השונים

הערה מתעלמים מקריאה מקדימה (pre-fetching) של בלוקים קריאה מקדימה חוסכת זמן, כי היא מתבצעת במקביל לעיבוד בלוקים שכבר נמצאים בזיכרון אבל קשה להביא אותה בחשבון באופן מדויק במקרה הגרוע ביותר אי אפשר לבצע קריאה מקדימה

הזמן הנדרש לביצוע הפעולות ערבול ממוין ערמה 1.25BD BD מעבר על כל הרשומות D Dlog2B 0.5BD חיפוש רשומה לפי מפתח D(log2B + # of pages with matches) חיפוש כל הרשומות בטווח נתון 2D Search + BD הוספת רשומה Search + D מחיקת רשומה

אינדקסים אינדקס מעל קובץ (קרי, יחס) נבנה עבור מפתח חיפוש (search key) מפתח חיפוש הוא אוסף כלשהו של שדות, שאיננו בהכרח מפתח של היחס בהינתן ערך עבור מפתח החיפוש, האינדקס מאפשר להגיע ישירות לכל הרשומות בעלות הערך הנתון (יכולה להיות יותר מרשומה אחת עם אותו ערך עבור מפתח החיפוש)

שתי האפשרויות למבנה הרשומות של אינדקס רשומות רגילות של יחס, כלומר האינדקס הוא חלק מקובץ שמאחסן רשומות של יחס במקרה זה האינדקס חייב להיות על המפתח הראשי לכל היותר אינדקס אחד יכול להיות כזה נתוני כניסה (data entries) לקובץ אחר נתוני כניסה הן רשומות שמאפשרות להגיע במהירות לכל הרשומות, בקובץ האחר, שיש להן את הערך המבוקש עבור מפתח החיפוש במקרה זה האינדקס הוא קובץ נפרד

האפשרויות למבנה של נתוני כניסה נתוני כניסה מהצורה (k, rid), כאשר k הוא ערך ו- rid (record identifier) הוא מצביע לרשומה של היחס עם הערך k הרשומה (k, rid) היא מאורך קבוע ויכולות להיות מספר רשומות עבור ערך נתון של k נתוני כניסה מהצורה (k, list of rids) זוהי רשומה מאורך משתנה ויש רק רשומה אחת עבור ערך נתון של k

סיווג אינדקסים: אינדקס ראשי לעומת אינדקס משני אינדקס ראשי – מפתח החיפוש מכיל מפתח ראשי של היחס אינדקס משני – אחרת פירוש אחר: אינדקס ראשי מכיל רשומות של קובץ, בעוד שאינדקס משני מכיל נתוני כניסה 11

סיווג אינדקסים: אינדקס מקובץ לעומת אינדקס שאינו מקובץ אינדקס מקובץ (clustered index) – סדר הרשומות באינדקס זהה או "קרוב" לסדר הרשומות בקובץ אינדקס לא מקובץ (unclustered index) – אחרת אינדקס שמכיל רשומות של קובץ הוא תמיד מקובץ, אבל אינדקס מקובץ יכול להיות בנוי גם מנתוני כניסה לכל היותר אינדקס אחד יכול להיות מקובץ שליפת רשומות לפי אינדקס לא מקובץ לוקחת יותר זמן אינדקס מקובץ, שהנו נפרד מהקובץ עצמו, דורש תהליך יקר למדי של עדכון, כדי שיישאר מקובץ גם לאחר עדכונים תכופים של הקובץ עצמו 11

בניית אינדקס מקובץ עבור קובץ ערמה מיין את הערמה והשאר בכל בלוק שטח פנוי להוספת רשומות בעתיד בעתיד יתכן ויהיה צורך בבלוקים של overflow לצורך הוספת רשומות – לכן הסדר של רשומות האינדקס קרוב, אבל לא זהה, לזה של רשומות הקובץ Index entries UNCLUSTERED CLUSTERED direct search for data entries Data entries Data entries (Index File) (Data file) Data Records Data Records 12

אינדקס צפוף ואינדקס דליל אינדקס דליל שומר רק חלק מהערכים של מפתח החיפוש חייב להיות אינדקס מקובץ כדי למצוא את הרשומות של הקובץ עם מפתח k מחפשים ערך b כך ש- b הערך הגדול ביותר באינדקס שעדיין אינו גדול מ- k ממשיכים לחפש בקובץ בסדר עולה מהרשומה הראשונה עם הערך b

מפתח חיפוש מורכב כאשר מפתח חיפוש כולל כמה שדות, רצוי למיין את השדות השונים לפי מיון לקסיקוגרפי (או לבחור בשיטת אכסון מתוחכמת יותר), כדי שניתן יהיה לבצע ביעילות חיפוש טווח על חלק מהשדות לדוגמה, אינדקס על (age, sal) חפש רשומות עם age=20 חפש רשומות עם age=20 and sal>1000 מצא כל הרשומות עם sal=20 ובחר מתוכן את אלה עם המשכורות הגדולות מ- 1000

סוגי מבנים של אינדקסים אינדקס מבוסס על עץ חיפוש מאוזן עץ B+ הוא הנפוץ ביותר מאפשר חיפוש לפי טווח אינדקס מבוסס על ערבול מחייב ערבול בר-הרחבה (extendible hashing), כלומר אפשרות להגדיל את מספר הדליים (ולשנות בהתאם את פונקצית הערבול) כאשר מתווספות רשומות מאפשר חיפוש רק לפי שוויון

שקפים על עץ B+ להלן שלושה שקפים מפרק 9 בספר של Ramakrishnan על עץ B+

B+ Tree: The Most Widely Used Index Insert/delete at log F N cost; keep tree height-balanced. (F = fanout, N = # leaf pages) Minimum 50% occupancy (except for root). Each node contains d <= m <= 2d entries. The parameter d is called the order of the tree. Supports equality and range-searches efficiently. Index Entries Data Entries ("Sequence set") (Direct search) 9

Example B+ Tree Search begins at root, and key comparisons direct it to a leaf Search for 5*, 15*, all data entries >= 24* ... Root 13 17 24 30 2* 3* 5* 7* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39* Based on the search for 15*, we know it is not in the tree! 10

B+ Trees in Practice Typical order: 100. Typical fill-factor: 67%. average fanout = 133 Typical capacities: Height 4: 1334 = 312,900,700 records Height 3: 1333 = 2,352,637 records Can often hold top levels in buffer pool: Level 1 = 1 page = 8 Kbytes Level 2 = 133 pages = 1 Mbyte Level 3 = 17,689 pages = 133 MBytes

נושאים נוספים על עצי B+ בפרק 9 הוספה ומחיקה של רשומות צריך לדאוג שכל צומת יישאר לפחות חצי מלא צריך לדאוג שהעץ יישאר מאוזן בנייה ראשונית של עץ B+ עבור קובץ נתון דחיסת מפתחות בעלים הפנימיים מגדיל את ה- fan-out ולכן מקטין את עומק העץ

נושאים נוספים שלא נכסה פרק 10 עוסק באינדקסים הבנויים על ערבול פרק 11 עוסק במיון חיצוני כלומר, שיטות מיון כאשר אי אפשר לקרוא בבת אחת את כל הנתונים לתוך הזיכרון הפנימי מיון חיצוני נחוץ כאשר רוצים תוצאה ממוינת למחיקת עותקים כפולים של רשומות (DISTINCT) לצורך ביצוע group by לביצוע sort-merge join (אחת השיטות של צירוף)