אופרטורים של עלים

לאופרטור עלה אין צאצאים. סוגי האופרטורים של עלים הם:

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

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

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");

Array unnest

אופרטור פריסת מערך משטח מערך קלט לשורות של רכיבים. כל שורה שמתקבלת מכילה עד שתי עמודות: הערך מהמערך והמיקום האופציונלי במערך (החל מ-0).

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

SELECT a, b FROM UNNEST([1,2,3]) a WITH OFFSET b;

/*---+---+
 | a | b |
 +---+---+
 | 1 | 0 |
 | 2 | 1 |
 | 3 | 2 |
 +---+---*/

השאילתה משטחת את המערך [1,2,3] בעמודה a ומציגה את מיקום המערך בעמודה b.

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

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

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

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

מאפיינים

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

נתוני ביצוע

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

יצירת קשר

האופרטור generate relation מחזיר אפס שורות או יותר.

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

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

מאפיינים

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

נתוני ביצוע

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

יחס היחידות

יחס היחידה מחזיר שורה אחת. זהו מקרה מיוחד של האופרטור generate relation.

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

SELECT 1 + 2 AS Result;

/*--------+
 | Result |
 +--------+
 | 3      |
 +--------*/

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

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

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

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

מאפיינים

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

נתוני ביצוע

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

קשר ריק

empty relation לא מחזירה שורות. זהו מקרה מיוחד של האופרטור generate relation.

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

SELECT *
FROM   albums
LIMIT  0

/*
No result
*/

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

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

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

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

מאפיינים

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

נתוני ביצוע

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

סריקה

אופרטור scan סורק מקור של שורות ומחזיר אותן. אלה סוגי האופרטורים של הסריקה:

  • סריקת טבלה: סריקה של טבלה.
  • סריקת אינדקס: סריקה של אינדקס.
  • סריקה של קבוצת נתונים: הסריקות מתבצעות בטבלאות ביניים שנוצרו על ידי אופרטורים רלציוניים אחרים (לדוגמה, טבלה שנוצרה על ידי distributed cross apply).

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

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

אם שאילתה צריכה לחפש בכל השורות בטבלה, מתבצע סריקה מלאה, שמופיעה בתוכנית הביצוע כ-full scan: true.

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

SELECT s.lastname
FROM   singers@{FORCE_INDEX=SingersByFirstLastName} as s
WHERE  s.firstname = 'Catalina';

/*----------+
 | LastName |
 +----------+
 | Smith    |
 +----------*/

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

תוכנית ביצוע של סריקת מפעיל

בתוכנית הביצוע, האופרטור distributed union ברמה העליונה שולח תוכניות משנה לשרתים מרוחקים. לכל תוכנית משנה יש אופרטור serialize result ואופרטור index scan. הפרדיקט Key Predicate: FirstName = 'Catalina' מגביל את הסריקה לשורות באינדקס SingersByFirstLastname שבהן FirstName שווה ל-Catalina. הסריקה של האינדקס מחזירה את הפלט לאופרטור של תוצאת הסריאליזציה.

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

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

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

לאופרטור Scan יש מאפיינים נפרדים נוספים ונתוני סטטיסטיקה של הביצוע.

מאפיינים

שם תיאור
שיטת סריקה יכול להיות Row,‏ Batch או Automatic. בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת. בביצוע אוטומטי, האופרטור מתחיל לסרוק באמצעות השיטה Row, אבל יכול לעבור לשיטה Batch כשצריך.
תנאי חיפוש פרדיקט במפתח הראשי שמשמש לביצוע חיפושים יעילים בטבלה. המאפיין הזה מציין שלא צריך לסרוק את כל הטבלה כדי ליצור את קבוצת השורות הרצויה. המאפיין הזה רלוונטי רק לTable Scans ולIndex Scans.
הקצאת משתנים רשימה של העמודות שנקראו מהטבלה.
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

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

סינון סריקות

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

  • תנאי שיורי: כל תנאי אחר שבו Spanner יכול להעריך את הסריקה כדי להגביל את כמות הנתונים שנקראים.

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

SELECT lastname
FROM   singers
WHERE  singerid = 1

/*----------+
 | LastName |
 +----------+
 | Richards |
 +----------*/

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

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

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

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

לאופרטור Filter scan יש מאפיינים נוספים ייחודיים.

מאפיינים

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

נתוני ביצוע

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