אופרטורים בינאריים

לאופרטור בינארי יש שני צאצאים יחסיים. האופרטורים הבאים הם אופרטורים בינאריים:

סכימת מסד נתונים

השאילתות ותוכניות הביצוע בדף הזה מבוססות על סכימת מסד הנתונים הבאה:

CREATE TABLE Singers (
  SingerId   INT64 NOT NULL,
  FirstName  STRING(1024),
  LastName   STRING(1024),
  SingerInfo BYTES(MAX),
  BirthDate  DATE
) PRIMARY KEY(SingerId);

CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName);

CREATE TABLE Albums (
  SingerId        INT64 NOT NULL,
  AlbumId         INT64 NOT NULL,
  AlbumTitle      STRING(MAX),
  MarketingBudget INT64
) PRIMARY KEY(SingerId, AlbumId),
  INTERLEAVE IN PARENT Singers ON DELETE CASCADE;

CREATE INDEX AlbumsByAlbumTitle ON Albums(AlbumTitle);

CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle) STORING (MarketingBudget);

CREATE TABLE Songs (
  SingerId  INT64 NOT NULL,
  AlbumId   INT64 NOT NULL,
  TrackId   INT64 NOT NULL,
  SongName  STRING(MAX),
  Duration  INT64,
  SongGenre STRING(25)
) PRIMARY KEY(SingerId, AlbumId, TrackId),
  INTERLEAVE IN PARENT Albums ON DELETE CASCADE;

CREATE INDEX SongsBySingerAlbumSongNameDesc ON Songs(SingerId, AlbumId, SongName DESC), INTERLEAVE IN Albums;

CREATE INDEX SongsBySongName ON Songs(SongName);

CREATE TABLE Concerts (
  VenueId      INT64 NOT NULL,
  SingerId     INT64 NOT NULL,
  ConcertDate  DATE NOT NULL,
  BeginTime    TIMESTAMP,
  EndTime      TIMESTAMP,
  TicketPrices ARRAY<INT64>
) PRIMARY KEY(VenueId, SingerId, ConcertDate);

אפשר להשתמש בהצהרות הבאות של שפת טיפול בנתונים (DML) כדי להוסיף נתונים לטבלאות האלה:

INSERT INTO Singers (SingerId, FirstName, LastName, BirthDate)
VALUES (1, "Marc", "Richards", "1970-09-03"),
       (2, "Catalina", "Smith", "1990-08-17"),
       (3, "Alice", "Trentor", "1991-10-02"),
       (4, "Lea", "Martin", "1991-11-09"),
       (5, "David", "Lomond", "1977-01-29");

INSERT INTO Albums (SingerId, AlbumId, AlbumTitle)
VALUES (1, 1, "Total Junk"),
       (1, 2, "Go, Go, Go"),
       (2, 1, "Green"),
       (2, 2, "Forever Hold Your Peace"),
       (2, 3, "Terrified"),
       (3, 1, "Nothing To Do With Me"),
       (4, 1, "Play");

INSERT INTO Songs (SingerId, AlbumId, TrackId, SongName, Duration, SongGenre)
VALUES (2, 1, 1, "Let's Get Back Together", 182, "COUNTRY"),
       (2, 1, 2, "Starting Again", 156, "ROCK"),
       (2, 1, 3, "I Knew You Were Magic", 294, "BLUES"),
       (2, 1, 4, "42", 185, "CLASSICAL"),
       (2, 1, 5, "Blue", 238, "BLUES"),
       (2, 1, 6, "Nothing Is The Same", 303, "BLUES"),
       (2, 1, 7, "The Second Time", 255, "ROCK"),
       (2, 3, 1, "Fight Story", 194, "ROCK"),
       (3, 1, 1, "Not About The Guitar", 278, "BLUES");

החלת הצטרפות

apply join הוא אופרטור הצירוף הראשי שמשמש את Spanner. אופרטורים של Apply join מבצעים עיבוד לפי שורות, בניגוד לאופרטורים שמבצעים עיבוד מבוסס-קבוצות כמו hash join. לאופרטור apply יש שני קלטים: input (צאצא שמאלי) ו-map (צאצא ימני). האופרטור apply מחיל כל שורה בצד הקלט על הצד של המיפוי באמצעות שיטת apply:‏ cross,‏ outer,‏ semi או anti-semi. בנוסף, גרסה של apply join מופיעה גם בצד המפה של Distributed apply.

האופרטור Apply join הכי יעיל כש:

  • הקרדינליות של הקלט נמוכה.
  • מפתח האיחוד הוא קידומת של המפתח הראשי בצד המפה.
  • השאילתה מצטרפת לשתי טבלאות משולבות.

מאפיינים ונתונים סטטיסטיים של הרצה

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

מאפיינים

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

נתוני ביצוע

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

החלה מוצלבת

הפעולה Cross apply מבצעת צירוף פנימי שבו מוחזרות רק שורות תואמות.

השאילתה הבאה מדגימה את האופרטור הזה:

השאילתה מבקשת את השם הפרטי של כל זמר, יחד עם השם של רק אחד מהשירים של הזמר.

 SELECT si.firstname,
       (SELECT so.songname
        FROM   songs AS so
        WHERE  so.singerid = si.singerid
        LIMIT  1)
FROM   singers AS si;

/*-----------+--------------------------+
 | FirstName | Unspecified              |
 +-----------+--------------------------+
 | Alice     | Not About The Guitar     |
 | Catalina  | Let's Get Back Together  |
 | David     | NULL                     |
 | Lea       | NULL                     |
 | Marc      | NULL                     |
 +-----------+--------------------------*/

השאילתה מאכלסת את העמודה הראשונה מהטבלה Singers ואת העמודה השנייה מהטבלה Songs. אם SingerId מסוים היה קיים בטבלה Singers אבל לא היה SingerId תואם בטבלה Songs, בעמודה השנייה יופיע הערך NULL.

תוכנית הביצוע מתחילה כך:

אופרטור Cross apply בתוכנית ביצוע עליונה

הצומת ברמה העליונה הוא אופרטור של איחוד מבוזר. אופרטור האיחוד המבוזר מחלק תוכניות משנה לשרתים מרוחקים. תת-התוכנית מכילה את האופרטור serialize result שמחשב את השם הפרטי של הזמר ואת השם של אחד מהשירים של הזמר, ומבצע סריאליזציה של כל שורה בפלט.

אופרטור התוצאה של serialize מקבל את הקלט שלו מאופרטור cross apply. הקלט של אופרטור ההצבה הוא סריקה של הטבלה Singers.

תוכנית הביצוע ממשיכה כך:

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

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

  • אופרטור מצטבר שמחזיר Songs.SongName.
  • אופרטור limit שמגביל את מספר השירים שמוחזרים לאחד לכל זמר.
  • סריקת אינדקס באינדקס SongsBySingerAlbumSongNameDesc.

האופרטור cross apply ממפה כל שורה מצד הקלט לשורה בצד המיפוי עם אותו SingerId. הפלט של האופרטור cross apply הוא הערך FirstName משורת הקלט והערך SongName משורת המיפוי. (הערך SongName הוא NULL אם אין שורת מיפוי שתואמת ל-SingerId). אופרטור האיחוד המבוזר בחלק העליון של תוכנית הביצוע משלב את כל שורות הפלט מהשרתים המרוחקים ומחזיר אותן כתוצאות השאילתה.

החלה חיצונית

outer apply מספק סמנטיקה של איחוד חיצוני שמאלי. היא מוודאת שכל הרצה בצד המפה מחזירה לפחות שורה אחת על ידי הוספת ריפוד NULL אם צריך.

הפעלת בלימה

האופרטור semi apply מחזיר עמודות קלט רק אם יש התאמה בצד המיפוי.

השאילתה הבאה משתמשת ב-semi join כדי למצוא אילו זמרים יש להם אלבום:

SELECT
  FirstName,
  LastName
FROM
  Singers
WHERE
  SingerId IN (
  SELECT
    SingerId
  FROM
    Albums);

/*-----------+----------+
 | FirstName | LastName |
 +-----------+----------+
 | Marc      | Richards |
 | Catalina  | Smith    |
 | Alice     | Trentor  |
 | Lea       | Martin   |
 +-----------+----------*/

פלח התוכנית יופיע כך:

תוכנית ביצוע של הצטרפות מסוג Semi apply

החלת אנטי-סמי

אופרטור Anti-semi apply דומה לאופרטור semi apply, רק שהוא מחזיר את העמודות של טבלת הקלט רק כשאין התאמה בצד המיפוי.

השאילתה הבאה משתמשת ב-anti-semi join כדי למצוא אילו זמרים לא מופיעים בטבלה Album:

SELECT
  FirstName,
  LastName
FROM
  Singers
WHERE
  SingerId NOT IN (
  SELECT
    SingerId
  FROM
    Albums);

/*-----------+----------+
 | FirstName | LastName |
 +-----------+----------+
 | David     | Lomond   |
 +-----------+----------*/

פלח התוכנית יופיע כך:

תוכנית ביצוע של צירוף מסוג anti-semi apply

Hash join

אופרטור hash join הוא הטמעה מבוססת-גיבוב של שאילתות איחוד (join) ב-SQL. הצטרפות גיבוב מבצעת עיבוד מבוסס-קבוצה. האופרטור hash join קורא שורות מקלט שמסומן כ-build (צאצא שמאלי) ומכניס אותן לטבלת hash על סמך תנאי הצטרפות. לאחר מכן, אופרטור ה-hash join קורא שורות מהקלט שמסומן כ-probe (צאצא ימני). לכל שורה שנקראת מקלט הבדיקה, אופרטור ה-hash join מחפש שורות תואמות בטבלת הגיבוב. אופרטור ה-hash join מחזיר את השורות התואמות כתוצאה.

ל-Hash join יש את היתרונות הבאים:

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

השאילתה הבאה מדגימה את האופרטור הזה:

SELECT a.albumtitle,
       s.songname
FROM   albums AS a join@{join_method=hash_join} songs AS s
ON a.singerid = s.singerid
AND    a.albumid = s.albumid;

/*-----------------------+--------------------------+
 | AlbumTitle            | SongName                 |
 +-----------------------+--------------------------+
 | Nothing To Do With Me | Not About The Guitar     |
 | Green                 | The Second Time          |
 | Green                 | Starting Again           |
 | Green                 | Nothing Is The Same      |
 | Green                 | Let's Get Back Together  |
 | Green                 | I Knew You Were Magic    |
 | Green                 | Blue                     |
 | Green                 | 42                       |
 | Terrified             | Fight Story              |
 +-----------------------+--------------------------*/

פלח תוכנית הביצוע מופיע כך:

תוכנית ביצוע של אופרטור Hash join

בתוכנית הביצוע, build הוא distributed union שמפיץ scans בטבלה Albums. ‫Probe הוא אופרטור איחוד מבוזר שמפיץ סריקות באינדקס SongsBySingerAlbumSongNameDesc. האופרטור hash join קורא את כל השורות מהצד של ה-build. כל שורת build מוצבת בטבלת hash על סמך העמודות בתנאי a.SingerId = s.SingerId AND a.AlbumId = s.AlbumId. לאחר מכן, אופרטור ה-hash join קורא את כל השורות מצד הבדיקה. לכל שורת בדיקה, אופרטור ה-hash join מחפש התאמות בטבלת הגיבוב. ההתאמות שמתקבלות מוחזרות על ידי אופרטור ה-hash join.

יכול להיות שגם התאמות שמתקבלות בטבלת הגיבוב יסוננו לפי תנאי שיורי לפני שהן יוחזרו. (דוגמה למקרים שבהם מופיעים תנאים שיוריים היא במקרים של צירופים שאינם שוויון). תוכניות ביצוע של Hash join יכולות להיות מורכבות בגלל ניהול הזיכרון והווריאציות של ה-join. אלגוריתם ה-hash join הראשי מותאם לטיפול בגרסאות של inner join,‏ semi join,‏ anti join ו-outer join.

מאפיינים ונתונים סטטיסטיים של הרצה

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

מאפיינים

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

נתוני ביצוע

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

מיזוג

אופרטור merge join הוא הטמעה מבוססת-מיזוג של SQL join. שני הצדדים של הצירוף יוצרים שורות שממוינות לפי העמודות שמשמשות בתנאי הצירוף. הפעולה merge join צורכת את שני זרמי הקלט בו-זמנית ומפיקה שורות כשהתנאי join מתקיים. אם הקלט לא ממוין, האופטימיזציה מוסיפה לתוכנית אופרטורים מפורשים של Sort.

ל-Merge join יש את היתרונות הבאים:

  • אם הנתונים כבר ממוינים, לא נדרש זיכרון.
  • גם אם הנתונים לא ממוינים, עבור הצטרפות מבוזרת, המערכת יכולה לבצע את המיון בכל פיצול בנפרד, במקום ליצור טבלת גיבוב גדולה בשורש.

האפשרות Merge join לא נבחרת אוטומטית על ידי הכלי לאופטימיזציה. כדי להשתמש באופרטור הזה, צריך להגדיר את שיטת הצירוף ל-MERGE_JOIN ברמז לשאילתה, כמו בדוגמה הבאה:

SELECT a.albumtitle,
       s.songname
FROM   albums AS a join@{join_method=merge_join} songs AS s
ON     a.singerid = s.singerid
AND    a.albumid = s.albumid;

/*-----------------------+--------------------------+
 | AlbumTitle            | SongName                 |
 +-----------------------+--------------------------+
 | Green                 | The Second Time          |
 | Green                 | Starting Again           |
 | Green                 | Nothing Is The Same      |
 | Green                 | Let's Get Back Together  |
 | Green                 | I Knew You Were Magic    |
 | Green                 | Blue                     |
 | Green                 | 42                       |
 | Terrified             | Fight Story              |
 | Nothing To Do With Me | Not About The Guitar     |
 +-----------------------+--------------------------*/

תוכנית הביצוע מוצגת כך:

תוכנית ביצוע של מפעיל 1 של מיזוג

בתוכנית הביצוע הזו, מיזוג ההצטרפות מפוזר כך שההצטרפות מתבצעת במקום שבו הנתונים נמצאים. בנוסף, זה מאפשר לאיחוד המיזוג בדוגמה הזו לפעול ללא אופרטורי מיון נוספים, כי שני סריקות הטבלה כבר ממוינות לפי SingerId, AlbumId, שהוא תנאי האיחוד. בתוכנית הזו, הסריקה השמאלית של הטבלה Albums מתקדמת בכל פעם שהערכים SingerId ו-AlbumId שלה קטנים מהערכים SingerId_1 ו-AlbumId_1 של הסריקה הימנית. באופן דומה, הסריקה מימין מתקדמת בכל פעם שהערכים שלה קטנים מהערכים של הסריקה משמאל. המיזוג המתקדם ממשיך לחפש שורות מקבילות כדי להחזיר שורות תואמות.

דוגמה נוספת למיזוג באמצעות הצטרפות באמצעות השאילתה הבאה:

SELECT a.albumtitle,
       s.songname
FROM   albums AS a join@{join_method=merge_join} songs AS s
ON a.albumid = s.albumid;

/*-----------------------+--------------------------+
 | AlbumTitle            | SongName                 |
 +-----------------------+--------------------------+
 | Total Junk            | The Second Time          |
 | Total Junk            | Starting Again           |
 | Total Junk            | Nothing Is The Same      |
 | Total Junk            | Let's Get Back Together  |
 | Total Junk            | I Knew You Were Magic    |
 | Total Junk            | Blue                     |
 | Total Junk            | 42                       |
 | Total Junk            | Not About The Guitar     |
 | Green                 | The Second Time          |
 | Green                 | Starting Again           |
 | Green                 | Nothing Is The Same      |
 | Green                 | Let's Get Back Together  |
 | Green                 | I Knew You Were Magic    |
 | Green                 | Blue                     |
 | Green                 | 42                       |
 | Green                 | Not About The Guitar     |
 | Nothing To Do With Me | The Second Time          |
 | Nothing To Do With Me | Starting Again           |
 | Nothing To Do With Me | Nothing Is The Same      |
 | Nothing To Do With Me | Let's Get Back Together  |
 | Nothing To Do With Me | I Knew You Were Magic    |
 | Nothing To Do With Me | Blue                     |
 | Nothing To Do With Me | 42                       |
 | Nothing To Do With Me | Not About The Guitar     |
 | Play                  | The Second Time          |
 | Play                  | Starting Again           |
 | Play                  | Nothing Is The Same      |
 | Play                  | Let's Get Back Together  |
 | Play                  | I Knew You Were Magic    |
 | Play                  | Blue                     |
 | Play                  | 42                       |
 | Play                  | Not About The Guitar     |
 | Terrified             | Fight Story              |
 +-----------------------+--------------------------*/

תוכנית הביצוע מוצגת כך:

תוכנית ביצוע של אופרטור 2 של מיזוג

בתוכנית הביצוע הקודמת, האופטימיזציה של השאילתה הציגה אופרטורים נוספים של מיון כדי לבצע את מיזוג ההצטרפות. התנאי JOIN בשאילתת הדוגמה הזו מוגדר רק על AlbumId, אבל הנתונים לא מאוחסנים כך, ולכן צריך להוסיף מיון. מנוע השאילתות תומך באלגוריתם Distributed Merge, שמאפשר לבצע את המיון באופן מקומי במקום באופן גלובלי, וכך לחלק את עלות השימוש במעבד ולהריץ אותה במקביל.

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

מאפיינים ונתונים סטטיסטיים של הרצה

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

מאפיינים

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

נתוני ביצוע

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

איחוד רקורסיבי

אופרטור recursive union מבצע איחוד של שני קלטים, אחד שמייצג מקרה base והשני שמייצג מקרה recursive. הוא משמש בשאילתות של גרפים עם מעברים כמותיים בנתיבים. הקלט הבסיסי מעובד קודם ופעם אחת בלבד. הקלט הרקורסיבי מעובד עד שהרקורסיה מסתיימת. הרקורסיה מסתיימת כשמגיעים לגבול העליון, אם הוא צוין, או כשהרקורסיה לא מניבה תוצאות חדשות. בדוגמה הבאה, הטבלה Collaborations נוספת לסכימה, ונוצר גרף מאפיינים בשם MusicGraph.

CREATE TABLE Collaborations (
    SingerId INT64 NOT NULL,
    FeaturingSingerId INT64 NOT NULL,
    AlbumTitle STRING(MAX) NOT NULL,
) PRIMARY KEY(SingerId, FeaturingSingerId, AlbumTitle);

CREATE OR REPLACE PROPERTY GRAPH MusicGraph
    NODE TABLES(
        Singers
            KEY(SingerId)
            LABEL Singers PROPERTIES(
                BirthDate,
                FirstName,
                LastName,
                SingerId,
                SingerInfo)
            )
EDGE TABLES(
    Collaborations AS CollabWith
        KEY(SingerId, FeaturingSingerId, AlbumTitle)
        SOURCE KEY(SingerId) REFERENCES Singers(SingerId)
        DESTINATION KEY(FeaturingSingerId) REFERENCES Singers(SingerId)
        LABEL CollabWith PROPERTIES(
          AlbumTitle,
          FeaturingSingerId,
          SingerId),
);

שאילתת הגרף הבאה מוצאת זמרים ששיתפו פעולה עם זמר נתון או ששיתפו פעולה עם שותפי העריכה שלו.

GRAPH MusicGraph
MATCH (singer:Singers {singerId:42})-[c:CollabWith]->{1,2}(featured:Singers)
RETURN singer.SingerId AS singer, featured.SingerId AS featured

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

האופרטור recursive union מסנן את הטבלה Singers כדי למצוא את הזמר עם הערך SingerId. זהו קלט הבסיס לאיחוד רקורסיבי. הקלט הרקורסיבי לאיחוד הרקורסיבי כולל הצטרפות צולבת מבוזרת או אופרטור אחר של הצטרפות לשאילתות אחרות שמצטרפות שוב ושוב לטבלה Collaborations עם התוצאות של האיטרציה הקודמת של ההצטרפות. השורות מטופס הקלט הבסיסי יוצרות את האיטרציה האפסית. בכל איטרציה, הפלט של האיטרציה מאוחסן על ידי recursive spool scan. השורות מסריקת הסלילים הרקורסיבית מצורפות לטבלה Collaborations ב-spoolscan.featuredSingerId = Collaborations.SingerId. הרקרוסיה מסתיימת אחרי שתי איטרציות, כי זה הגבול העליון שצוין בשאילתה.

מאפיינים ונתונים סטטיסטיים של הרצה

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

מאפיינים

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

נתוני ביצוע

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