Ein Blattoperator hat keine untergeordneten Elemente. Diese Arten von Blattoperatoren gibt es:
Datenbankschema
Die Abfragen und Ausführungspläne auf dieser Seite basieren auf dem folgenden Datenbankschema:
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);
Sie können die folgenden DML-Anweisungen (Data Manipulation Language) verwenden, um diesen Tabellen Daten hinzuzufügen:
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
Der Operator Array Unnest vereinfacht ein Eingabe-Array so, dass es in Zeilen von Elementen vorliegt. Jede resultierende Zeile enthält bis zu zwei Spalten: den Wert aus dem Array und die optionale nullbasierte Position im Array.
Die folgende Abfrage veranschaulicht diesen Operator:
SELECT a, b FROM UNNEST([1,2,3]) a WITH OFFSET b;
/*---+---+
| a | b |
+---+---+
| 1 | 0 |
| 2 | 1 |
| 3 | 2 |
+---+---*/
Wird das Array [1,2,3] in Spalte a vereinfacht und die Arrayposition in Spalte b angezeigt.
Der Ausführungsplan sieht so aus:

Attribute und Ausführungsstatistiken
Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.
Eigenschaften
| Name | Beschreibung |
|---|---|
| Ausführungsmethode | Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig. |
Ausführungsstatistiken
| Name | Beschreibung |
|---|---|
| Latenz | Verstrichene Zeit aller Ausführungen im Operator. |
| Kumulative Latenz | Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente. |
| CPU-Zeit | Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde. |
| Kumulative CPU-Zeit | Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde. |
| Ausführungszeit | Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde. |
| Zurückgegebene Zeilen | Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden |
| Anzahl der Ausführungen | Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden. |
Generate Relation
Der Operator Generate Relation gibt null oder mehr Zeilen zurück.
Attribute und Ausführungsstatistiken
Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.
Eigenschaften
| Name | Beschreibung |
|---|---|
| Ausführungsmethode | Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig. |
Ausführungsstatistiken
| Name | Beschreibung |
|---|---|
| Latenz | Verstrichene Zeit aller Ausführungen im Operator. |
| Kumulative Latenz | Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente. |
| CPU-Zeit | Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde. |
| Kumulative CPU-Zeit | Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde. |
| Ausführungszeit | Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde. |
| Zurückgegebene Zeilen | Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden |
| Anzahl der Ausführungen | Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden. |
Unit Relation
Unit Relation gibt eine Zeile zurück. Das ist ein Sonderfall des Operators Generate Relation.
Die folgende Abfrage veranschaulicht diesen Operator:
SELECT 1 + 2 AS Result;
/*--------+
| Result |
+--------+
| 3 |
+--------*/
Der Ausführungsplan sieht so aus:

Attribute und Ausführungsstatistiken
Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.
Eigenschaften
| Name | Beschreibung |
|---|---|
| Ausführungsmethode | Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig. |
Ausführungsstatistiken
| Name | Beschreibung |
|---|---|
| Latenz | Verstrichene Zeit aller Ausführungen im Operator. |
| Kumulative Latenz | Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente. |
| CPU-Zeit | Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde. |
| Kumulative CPU-Zeit | Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde. |
| Ausführungszeit | Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde. |
| Zurückgegebene Zeilen | Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden |
| Anzahl der Ausführungen | Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden. |
Empty Relation
Empty Relation gibt keine Zeilen zurück. Das ist ein Sonderfall des Operators Generate Relation.
Die folgende Abfrage veranschaulicht diesen Operator:
SELECT *
FROM albums
LIMIT 0
/*
No result
*/
Der Ausführungsplan sieht so aus:

Attribute und Ausführungsstatistiken
Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.
Eigenschaften
| Name | Beschreibung |
|---|---|
| Ausführungsmethode | Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig. |
Ausführungsstatistiken
| Name | Beschreibung |
|---|---|
| Latenz | Verstrichene Zeit aller Ausführungen im Operator. |
| Kumulative Latenz | Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente. |
| CPU-Zeit | Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde. |
| Kumulative CPU-Zeit | Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde. |
| Ausführungszeit | Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde. |
| Zurückgegebene Zeilen | Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden |
| Anzahl der Ausführungen | Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden. |
Scannen
Der Operator Scan scannt eine Zeilenquelle und gibt die Zeilen zurück. Dies sind die Arten von Scan-Operatoren:
- Table Scan: Es wird eine Tabelle gescannt.
- Index Scan: Es wird ein Index gescannt.
- Batch Scan: Es werden Zwischentabellen gescannt, die von anderen relationalen Operatoren erstellt wurden (z. B. eine Tabelle, die mit Distributed Cross Apply erstellt wurde).
Wann immer möglich wendet Spanner im Rahmen eines Scans Prädikate auf Schlüssel an. Scans werden effizienter ausgeführt, wenn Spanner Prädikate anwendet, da der Scan nicht die gesamte Tabelle oder den gesamten Index lesen muss. Prädikate werden im Ausführungsplan so angezeigt:
- Suchbare Bedingung: Die suchbare Bedingung gilt, wenn Spanner eine bestimmte Zeile für den Zugriff in der Tabelle bestimmen kann. Im Allgemeinen geschieht das, wenn sich der Filter in einem Präfix des Primärschlüssels befindet. Wenn der Primärschlüssel beispielsweise aus
Col1undCol2besteht, dann ist die KlauselWHERE, die explizite Werte fürCol1oderCol1undCol2enthält, suchbar. In diesem Fall liest Spanner Daten nur innerhalb des Schlüsselbereichs.
Wenn eine Abfrage alle Zeilen in einer Tabelle nachschlagen muss, wird ein vollständiger Scan durchgeführt, der im Ausführungsplan als full scan: true angezeigt wird.
Die folgende Abfrage veranschaulicht diesen Operator:
SELECT s.lastname
FROM singers@{FORCE_INDEX=SingersByFirstLastName} as s
WHERE s.firstname = 'Catalina';
/*----------+
| LastName |
+----------+
| Smith |
+----------*/
Das Segment des Ausführungsplans sieht so aus:

Im Ausführungsplan sendet der übergeordnete Operator Distributed Union Teilpläne an Remoteserver. Jeder Teilplan hat den Operator Serialize Result und den Operator "Index Scan". Das Prädikat Key Predicate: FirstName = 'Catalina' schränkt den Scan auf Zeilen im Index SingersByFirstLastname ein, die als FirstName den Wert Catalina haben. Die Ausgabe von Index Scan wird an den Operator "Serialize Result" zurückgegeben.
In Spanner werden Scans eng mit Filter Scan verknüpft und als ein einzelner Operator betrachtet. Wenn keine Suchbedingung vorhanden ist, wird der Vorgang als „Vollständiger Scan“ angezeigt.
Attribute und Ausführungsstatistiken
Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.
Der Operator Scan hat zusätzliche eindeutige Eigenschaften und Ausführungsstatistiken.Eigenschaften
| Name | Beschreibung |
|---|---|
| Scanmethode | Kann Zeile, Batch oder Automatisch sein. Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig. Bei der automatischen Ausführung beginnt der Bediener mit dem Scannen mit der Methode Zeile, kann aber bei Bedarf zur Methode Batch wechseln. |
| Suchbedingung | Ein Prädikat für den Primärschlüssel, das für effiziente Suchvorgänge in einer Tabelle verwendet wird. Diese Property bedeutet, dass nicht die gesamte Tabelle gescannt werden muss, um die gewünschten Zeilen zu erhalten. Diese Property gilt nur für Table Scans und Index Scans. |
| Variablenzuweisung | Liste der Spalten, die aus der Tabelle gelesen werden. |
| Ausführungsmethode | Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig. |
Ausführungsstatistiken
| Name | Beschreibung |
|---|---|
| Gescannte Zeilen | Die Anzahl der während des Scans gelesenen Zeilen. |
| Anzahl der Suchvorgänge | Die Anzahl der Lookups oder Suchvorgänge, die von diesem Scan-Operator ausgeführt wurden. |
| Latenz | Verstrichene Zeit aller Ausführungen im Operator. |
| Kumulative Latenz | Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente. |
| CPU-Zeit | Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde. |
| Kumulative CPU-Zeit | Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde. |
| Ausführungszeit | Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde. |
| Zurückgegebene Zeilen | Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden |
| Anzahl der Ausführungen | Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden. |
Filter Scan
Der Operator Filter Scan bildet immer die Basis einer Tabellen- oder Indexsuche. Gemeinsam mit dem Scan reduziert er die Anzahl der aus der Datenbank gelesenen Zeilen. Der resultierende Scan erfolgt normalerweise schneller als unter Verwendung eines Filters. Spanner wendet den Operator „Filter Scan“ unter bestimmten Bedingungen an:
- Restbedingung: Alle anderen Bedingungen, bei denen Spanner den Scan auswerten kann, um die gelesene Datenmenge zu begrenzen.
Die folgende Abfrage veranschaulicht diesen Operator:
SELECT lastname
FROM singers
WHERE singerid = 1
/*----------+
| LastName |
+----------+
| Richards |
+----------*/
Der Ausführungsplan sieht so aus:

Attribute und Ausführungsstatistiken
Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.
Der Operator Filter Scan hat zusätzliche eindeutige Eigenschaften.Eigenschaften
| Name | Beschreibung |
|---|---|
| Restbedingung | Ein Prädikat, das nach dem Lesen der Zeile angewendet wird. |
| Ausführungsmethode | Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig. |
Ausführungsstatistiken
| Name | Beschreibung |
|---|---|
| Latenz | Verstrichene Zeit aller Ausführungen im Operator. |
| Kumulative Latenz | Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente. |
| CPU-Zeit | Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde. |
| Kumulative CPU-Zeit | Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde. |
| Ausführungszeit | Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde. |
| Zurückgegebene Zeilen | Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden |
| Anzahl der Ausführungen | Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden. |