שאילתת משנה של מערך דומה לשאילתת משנה סקלרית, אבל מותר לשאילתת המשנה להשתמש ביותר משורת קלט אחת. מערכת Spanner ממירה את השורות שנצרכו למערך פלט סקלרי יחיד שמכיל רכיב אחד לכל שורת קלט שנצרכה.
סכימת מסד נתונים
השאילתות ותוכניות הביצוע בדף הזה מבוססות על סכימת מסד הנתונים הבאה:
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");
השאילתה הבאה מדגימה את אופרטור שאילתת המשנה של המערך:
SELECT a.albumid,
array
(
select concertdate
FROM concerts
WHERE concerts.singerid = a.singerid)
FROM albums AS a;
שאילתת המשנה היא:
SELECT concertdate
FROM concerts
WHERE concerts.singerid = a.singerid;
Spanner ממיר את התוצאות של שאילתת המשנה לכל AlbumId למערך של ConcertDate שורות ביחס לאותו AlbumId. תוכנית הביצוע מציגה שאילתת משנה של מערך, שמסומנת בתווית Array Subquery, מעל אופרטור איחוד מבוזר:

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