1 חישוב ואופטימיזציה של שאילתות חלק 1 query evaluation and optimization...

45
1 ההההה הההההההההההה הה ההההההה ההה1 Query Evaluation and Optimization Part 1

Post on 20-Dec-2015

241 views

Category:

Documents


7 download

TRANSCRIPT

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

1

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

1חלק Query Evaluationand Optimization

Part 1

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

2

הקדמה:הבעיה הצגת

המשפיעים והגורמים

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

3

שאילתות: חישוב המטרההאפשר ככל יעילה בצורהמאוד: גדולה הנתונים כמות הבעיה

אחת בבת הנתונים כל את לקרוא אפשר איבחישוב להתחיל ואז הפנימי לזיכרון

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

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

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

4

הנו הגורם I/Oהזמן הנדרש ל- העיקרי המשפיע על זמן החישוב של

שאילתה על הנתונים CPUהחישוב המתבצע ע"י ה-

הנמצאים בזיכרון הפנימי אינו מסובךהקריאה מהדיסק והכתיבה לדיסק הנם

איטיים )לפחות( פי אלף מהפעולות המתבצעות בזיכרון הפנימי

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

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

5

הגורמים העיקריים המשפיעיםI/O על הזמן הנדרש ל-

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

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

התוכנית שנבחרה לחישוב השאילתה כולה, קרי

השיטה שנבחרה לביצוע כל אחת מהפעולותהסדר שנבחר לביצוע הפעולות

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

6

שנלמד העיקריים הנושאים

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

שיטות לחישוב כל אחת מהפעולות האלגבריותדגש מיוחד על שיטות לחישוב הצירוף, שהיא הפעולה

היקרה ביותר והמורכבת ביותר

של שאילתה, שמוצא אלגוריתם לאופטימיזציהאת

לביצוע כל אחת מהפעולות, ואתהאופטימליתהשיטה ביותר לביצוע הפעולותהמהירהסדר

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

7

דוגמה

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(

מהי האפשרות המהירה ביותר?

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

8

הדוגמה המשך

פעולות צירוף2 אפשרויות לסידור 3כאמור יש 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(

חלק מהגורמים המשפיעים על הסדר האופטימליארגון היחסים על הדיסק

גודל תוצאת הביניים עדיף לבצע תחילה צירוף שהתוצאה שלו היא יחס קטן ככל

האפשר

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

9

לחישוב עיקריות שיטותיחסים שני של הצירוף

צירוף היא הפעולה האלגברית היקרה ביותר וקיימות עבורה מספר שיטות חישוב שונות:

Block Nested-Loops JoinIndex Nested-Loops Join

Sort-Merge JoinHash Join

בהמשך, נתאר כל אחת מהשיטות הללוכמו כן, נתאר שיטות לחישוב הפעולות

האלגבריות האחרות

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

10

האופטימיזציה לבעיית דוגמה

צריך )R)A,B( ⋈ S)B,C( ⋈ T)B,Dעבור לבחור

שיטה מתאימה לכל אחת משתי פעולות הצירוף אין צורך לבחור אותה שיטה לשתי הפעולות

סדר מתאים לביצוע הפעולותיש מספר רב של אפשרויות לבחור מתוכן

הבחירה של השיטה לכל פעולה עשויה להיות תלויה בסדר הפעולות

עשויה S לבין Rהשיטה האופטימלית לחישוב הצירוף בין להיות תלויה בשאלה האם צירוף זה מתבצע ראשון או שני

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

11

? חשובה היא אופטימיזציה מדוע

לחישוב האופטימלית התוכנית ביןלחישוב גרועה תוכנית לבין שאילתה

עצום הבדל להיות יכול שאילתה אותההבדל אפילו ואולי שניות לעומת שעות

יותר גדולהתוכנית את לבחור חשוב כך כל לא

מבחירת – להימנע חשוב ביותר המהירהגרועה תוכנית

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

12

ארגון הנתונים על הדיסק,מבנה הדיסק

I/Oואופן הביצוע של פעולות

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

13

יחסים אחסון

דיסקים על בקבצים מאוחסנים יחסיםמורכב אחיד( דפים )מבלוקיםדיסק גודל בעלי

בשלמותו להיכתב או להיקרא חייב בלוקותלוי אחיד אינו בלוק כתיבת או לקריאת הזמן

הדיסק ובמצב הדיסק על הבלוק במיקוםהבלוק, למיקום יחסית הזרועה נמצאת היכן כלומר

פי לפחות איטיים הנם מדיסק והכתיבה הקריאההפנימי מהזיכרון וכתיבה מקריאה אלף

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

14

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

15

מפשטות הנחות

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

הזמן כאמור, המחיר של ביצוע שאילתה הנו תוך התעלמות הנדרש לקריאה וכתיבה מהדיסק,

CPUמהזמן שלוקחות פעולות ה- זאת הנחה סבירה, כי פעולות הדיסק לוקחות הרבה

CPUיותר זמן וניתנות לביצוע במקביל לפעולות ה-

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

16

כקובץ יחס אחסון

נפרד כקובץ מאוחסן יחס כל) דפים ) גם הנקראים מבלוקים בנוי קובץ

רבות רשומות בלוק בכלאפשרי בהחלט בבלוק רשומות עשרות

“ קריאת י ע מתבצעת רשומה על פעולה , הפנימי לזיכרון הרשומה את המכיל הבלוק

, בחזרה הבלוק וכתיבת הפעולה ביצועלדיסק

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

17

בבלוק רשומות אחסון

להיות יכולות קבוע רשומות או באורךמשתנה באורך

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

בלוק בתוך רשומה מציאתרשומות ממחיקת המתפנה מקום ניצול

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

18

של העיקרי הרעיוןבבלוק רשומות ארגון

, המורכב )RID )Record IDרשומה מזוהה ע"י ממספר הבלוק וממספר הרשומה בתוך הבלוק

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

של רשומה יכול להופיע במקומות RID: ה- הערהרבים במסד – בכל מקום שבו יש הפניה או

התייחסות לרשומה )אלא במחיר מאוד RIDלכן, אי אפשר לשנות את ה-

יקר(

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

19

בבלוק רשומות ארגון של הדגמה

אפשר להזיז את הרשומות בתוך הבלוק שלהןRIDבלי לשנות את ה-

Page iRid = )i,N(

Rid = )i,2(

Rid = )i,1(

Pointerto startof freespace

SLOT DIRECTORY

N … 2 120 16 24 N

#slots

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

20

(Bufferחוצץ )

, שלתוכו לחוצץ מוקצה הפנימי מהזיכרון חלקמהדיסק בלוקים נקראים

) דפים ) הבלוקים על פועלות האפליקציה תוכניותבחוצץ הנמצאים

, בחוצץ הנמצא בבלוק השימוש מסתיים כאשראחר בלוק לטובת מקומו את לנצל ניתן

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

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

21

חוצץ ניהול

Data must be in RAM for DBMS to operate on itTable of <frame#, pageid> pairs is maintained

DB

MAIN MEMORY

DISK

disk page

free frame

Page Requests from Higher Levels

BUFFER POOL

choice of frame dictatedby replacement policy

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

22

כיצד מחליטים איזה בלוק יפנה את מקומו?(Replacement Policy)מדיניות החלפה –

LRU )Least Recently Used( מחליפים – את הבלוק שנעשה בו שימוש הכי רחוק בעבר

OSמדיניות מקובלת בניהול זיכרון וירטואלי ע"י ה-

MRU )Most Recently Used(לעיתים מדיניות זאת טובה יותר, למשל במעבר

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

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

23

במערכת להשתמש ניתן , אבל החוצצים לניהול ההפעלה

מערכות לניהול מסדי נתונים מעדיפות לנהל את החוצצים בעצמן, כי

DBMSכך קל יותר להשיג תאימות של ה- למספר מערכות הפעלה שונות

יש היבטים שלא קיימים במערכות הפעלה ומצריכים טיפול מיוחד

תוכניות שרצות במקביל ומשתמשות באותו בלוק מדיניות החלפה שונה מזו שמתאימה לזיכרון

וירטואליקריאה מקדימה של בלוקים לתוך החוצץ

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

24

בלוקים של מקדימה קריאההחוצץ לתוך

במקביל I/Oכאמור, ניתן לבצע פעולות CPUלחישובים המבוצעים ע"י ה-

אם בתוכנית לחישוב שאילתה הוחלט שיש לעבור על קובץ באופן סדרתי, אז אפשר

לקרוא בכל שלב מספר בלוקים לתוך החוצץ )בהתאם לגודל החוצץ(, כאשר

פועל על הבלוקים CPUבאותו הזמן ה- שנקראו בשלב הקודם

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

25

קבצים סוגי

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

26

יחסים לאחסון קבצים סוגי

(Heap fileקובץ ערמה )הרשומות מאוחסנות )ללא מיון( בבלוקים,

שמשורשרים זה לזה

(Sorted fileקובץ ממוין )טוב לשליפת כל הרשומות לפי סדר המיון או למציאת

הרשומות בטווח מסוים של ערכים

(Hash fileקובץ ערבול )המפתח פונקצית הערבול מקבלת ערכים עבור

ומוצאת רשומות עם ערכים אלה

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

27

קובץ על הפעולות

הוספת או מחיקת רשומה בודדתחיפוש לפי ערך עבור המפתח

קובץ ערמהמוסיפים בסוף הקובץ

קובץ ממויןהקובץ ממוין לפי המפתח

מכווצים את הקובץ לאחר מחיקה

קובץ ערבול תפוסהoverflow, 80%אין

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

28

שקובעים קובץ של המאפייניםלביצוע הנדרש הזמן את

הפעולות Bמספר הבלוקים של הקובץ –

Rמספר הרשומות בבלוק – Dהזמן )הממוצע( לקרוא בלוק –

בעזרת הפרמטרים האלה נקבע את ( הנדרש I/Oהזמן )של פעולות ה-

לביצוע הפעולות בסוגי הקבצים השונים

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

29

הערה

מקריאה מקדימה מתעלמים (pre-fetching של בלוקים )

קריאה מקדימה חוסכת זמן, כי היא מתבצעת במקביל לעיבוד בלוקים שכבר

נמצאים בזיכרוןאבל קשה להביא אותה בחשבון באופן

מדויקבמקרה הגרוע ביותר אי אפשר לבצע

קריאה מקדימה

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

30

הפעולות לביצוע הנדרש הזמןערמהממויןערבול

1.25BDBDBD כל על מעברהרשומות

DDlog2B0.5BD רשומה חיפושמפתח לפי

1.25BDD)log2B + # of pages with matches(

BD כל חיפושבטווח הרשומות

נתון

2DSearch + BD2D רשומה הוספת

2DSearch + BDSearch + D

רשומה מחיקת

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

31

אינדקסים

אינדקס מעל קובץ )קרי, יחס( נבנה עבור (search key )מפתח חיפוש

מפתח חיפוש הוא אוסף כלשהו של שדות, שאיננו בהכרח מפתח של היחס

בהינתן ערך עבור מפתח החיפוש, האינדקס מאפשר להגיע ישירות לכל

הרשומות בעלות הערך הנתון )יכולה להיות יותר מרשומה אחת עם אותו ערך עבור

מפתח החיפוש(

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

32

למבנה האפשרויות שתיאינדקס של הרשומות

של יחס, כלומר האינדקס הוא רשומות רגילותחלק מקובץ שמאחסן רשומות של יחס

במקרה זה האינדקס חייב להיות על המפתח הראשילכל היותר אינדקס אחד יכול להיות כזה

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

לכל הרשומות, בקובץ האחר, שיש להן את הערך המבוקש עבור מפתח החיפוש

במקרה זה האינדקס הוא קובץ נפרד

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

33

של למבנה האפשרויותכניסה נתוני

k(, כאשר k, ridנתוני כניסה מהצורה ) הוא )rid )record identifierהוא ערך ו-

kמצביע לרשומה של היחס עם הערך ( היא מאורך קבוע ויכולות k, ridהרשומה )

kלהיות מספר רשומות עבור ערך נתון של

(k, list of ridsנתוני כניסה מהצורה )זוהי רשומה מאורך משתנה ויש רק רשומה

kאחת עבור ערך נתון של

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

34

: אינדקסים סיווגאינדקס לעומת ראשי אינדקס

משני – מפתח החיפוש מכיל מפתח אינדקס ראשי

ראשי של היחס – אחרת אינדקס משני

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

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

35

: אינדקסים סיווגשאינו אינדקס לעומת מקובץ אינדקס

מקובץ( – סדר הרשומות clustered index )אינדקס מקובץ

באינדקס זהה או "קרוב" לסדר הרשומות בקובץ( – אחרתunclustered index )אינדקס לא מקובץ

אינדקס שמכיל רשומות של קובץ הוא תמיד מקובץ, אבל אינדקס מקובץ יכול להיות בנוי גם מנתוני כניסה

לכל היותר אינדקס אחד יכול להיות מקובץשליפת רשומות לפי אינדקס לא מקובץ לוקחת יותר זמן

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

עדכונים תכופים של הקובץ עצמו

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

36

קובץ עבור מקובץ אינדקס בנייתערמה

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

overflowבעתיד יתכן ויהיה צורך בבלוקים של לצורך הוספת רשומות – לכן הסדר של רשומות האינדקס קרוב, אבל לא זהה, לזה של רשומות

Index entriesהקובץ

Data entries

direct search for

(Index File)(Data file)

Data Records

data entries

Data entries

Data Records

CLUSTERED UNCLUSTERED

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

37

דליל ואינדקס צפוף אינדקס

שומר רק חלק מהערכים של אינדקס דלילמפתח החיפוש

חייב להיות אינדקס מקובץ

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

b -הערך הגדול ביותר באינדקס שעדיין אינו גדול מ k

ממשיכים לחפש בקובץ בסדר עולה מהרשומה bהראשונה עם הערך

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

38

מורכב חיפוש מפתח

כאשר מפתח חיפוש כולל כמה שדות, רצוי למיין את השדות השונים לפי מיון לקסיקוגרפי )או

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

מהשדות(age, salלדוגמה, אינדקס על )

age=20חפש רשומות עם age=20 and sal>1000חפש רשומות עם

מצא כל הרשומות עםsal=20 ובחר מתוכן את 1000אלה עם המשכורות הגדולות מ-

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

39

אינדקסים של מבנים סוגי

אינדקס מבוסס על עץ חיפוש מאוזן הוא הנפוץ ביותר+Bעץ

מאפשר חיפוש לפי טווח

אינדקס מבוסס על ערבול extendible )ערבול בר-הרחבהמחייב

hashing כלומר אפשרות להגדיל את מספר ,)הדליים )ולשנות בהתאם את פונקצית

הערבול( כאשר מתווספות רשומותמאפשר חיפוש רק לפי שוויון

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

40

+Bשקפים על עץ

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

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

41

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)

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

42

Example B+ Tree

Search begins at root, and key comparisons direct it to a leaf Search for 5*, 15*, all data entries >= 24* ...

Based on the search for 15*, we know it is not in the tree!

Root

17 24 30

2* 3* 5* 7* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39*

13

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

43

B+ Trees in Practice

Typical order: 100. Typical fill-factor: 67%.

average fanout = 133

Typical capacities:Height 4: 1334 = 312,900,700 recordsHeight 3: 1333 = 2,352,637 records

Can often hold top levels in buffer pool:Level 1 = 1 page = 8 KbytesLevel 2 = 133 pages = 1 MbyteLevel 3 = 17,689 pages = 133 MBytes

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

44

+Bנושאים נוספים על עצי 9בפרק

הוספה ומחיקה של רשומותצריך לדאוג שכל צומת יישאר לפחות חצי מלא

צריך לדאוג שהעץ יישאר מאוזן

עבור קובץ נתון+Bבנייה ראשונית של עץ דחיסת מפתחות בעלים הפנימיים

ולכן מקטין את עומק fan-outמגדיל את ה- העץ

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

45

נכסה שלא נוספים נושאים

עוסק באינדקסים הבנויים על ערבול10פרק עוסק במיון חיצוני11פרק

כלומר, שיטות מיון כאשר אי אפשר לקרוא בבת אחת את כל הנתונים לתוך הזיכרון הפנימי

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