Operator leaf tidak memiliki turunan. Jenis operator leaf adalah:
Skema database
Kueri dan rencana eksekusi di halaman ini didasarkan pada skema database berikut:
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);
Anda dapat menggunakan pernyataan Bahasa Manipulasi Data (DML) berikut untuk menambahkan data ke tabel ini:
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");
Unnest array
Operator membuka array meratakan array input menjadi baris elemen. Setiap baris yang dihasilkan berisi hingga dua kolom: nilai dari array dan posisi berbasis nol opsional dalam array.
Kueri berikut menunjukkan operator ini:
SELECT a, b FROM UNNEST([1,2,3]) a WITH OFFSET b;
/*---+---+
| a | b |
+---+---+
| 1 | 0 |
| 2 | 1 |
| 3 | 2 |
+---+---*/
Kueri meratakan array [1,2,3] di kolom a dan menampilkan posisi array di kolom b.
Rencana eksekusi akan muncul sebagai berikut:

Properti dan statistik eksekusi
Properti operator menjelaskan sifat yang digunakan saat operator dijalankan. Statistik eksekusi adalah nilai yang dikumpulkan selama eksekusi kueri untuk membantu Anda menilai performa operator.
Properti
| Nama | Deskripsi |
|---|---|
| Metode eksekusi | Dalam Eksekusi baris, operator memproses satu baris dalam satu waktu. Dalam Eksekusi batch, operator memproses batch baris sekaligus. |
Statistik eksekusi
| Nama | Deskripsi |
|---|---|
| Latensi | Waktu berlalu dari semua eksekusi yang dilakukan di operator. |
| Latensi kumulatif | Total waktu operator saat ini dan turunannya. |
| Waktu CPU | Jumlah waktu CPU yang dihabiskan untuk mengeksekusi operator. |
| Waktu CPU kumulatif | Total waktu CPU yang dihabiskan untuk mengeksekusi operator dan turunannya. |
| Waktu eksekusi | Total waktu yang diperlukan untuk menjalankan kueri dan memproses hasil. |
| Baris yang ditampilkan | Jumlah baris yang dihasilkan oleh operator ini |
| Jumlah eksekusi | Frekuensi operator dieksekusi. Beberapa eksekusi dapat berjalan secara paralel. |
Buat relasi
Operator generate relation menampilkan nol baris atau lebih.
Properti dan statistik eksekusi
Properti operator menjelaskan sifat yang digunakan saat operator dijalankan. Statistik eksekusi adalah nilai yang dikumpulkan selama eksekusi kueri untuk membantu Anda menilai performa operator.
Properti
| Nama | Deskripsi |
|---|---|
| Metode eksekusi | Dalam Eksekusi baris, operator memproses satu baris dalam satu waktu. Dalam Eksekusi batch, operator memproses batch baris sekaligus. |
Statistik eksekusi
| Nama | Deskripsi |
|---|---|
| Latensi | Waktu berlalu dari semua eksekusi yang dilakukan di operator. |
| Latensi kumulatif | Total waktu operator saat ini dan turunannya. |
| Waktu CPU | Jumlah waktu CPU yang dihabiskan untuk mengeksekusi operator. |
| Waktu CPU kumulatif | Total waktu CPU yang dihabiskan untuk mengeksekusi operator dan turunannya. |
| Waktu eksekusi | Total waktu yang diperlukan untuk menjalankan kueri dan memproses hasil. |
| Baris yang ditampilkan | Jumlah baris yang dihasilkan oleh operator ini |
| Jumlah eksekusi | Frekuensi operator dieksekusi. Beberapa eksekusi dapat berjalan secara paralel. |
Relasi unit
unit relation menampilkan satu baris. Operator ini adalah kasus khusus dari operator generate relation.
Kueri berikut menunjukkan operator ini:
SELECT 1 + 2 AS Result;
/*--------+
| Result |
+--------+
| 3 |
+--------*/
Rencana eksekusi akan muncul sebagai berikut:

Properti dan statistik eksekusi
Properti operator menjelaskan sifat yang digunakan saat operator dijalankan. Statistik eksekusi adalah nilai yang dikumpulkan selama eksekusi kueri untuk membantu Anda menilai performa operator.
Properti
| Nama | Deskripsi |
|---|---|
| Metode eksekusi | Dalam Eksekusi baris, operator memproses satu baris dalam satu waktu. Dalam Eksekusi batch, operator memproses batch baris sekaligus. |
Statistik eksekusi
| Nama | Deskripsi |
|---|---|
| Latensi | Waktu berlalu dari semua eksekusi yang dilakukan di operator. |
| Latensi kumulatif | Total waktu operator saat ini dan turunannya. |
| Waktu CPU | Jumlah waktu CPU yang dihabiskan untuk mengeksekusi operator. |
| Waktu CPU kumulatif | Total waktu CPU yang dihabiskan untuk mengeksekusi operator dan turunannya. |
| Waktu eksekusi | Total waktu yang diperlukan untuk menjalankan kueri dan memproses hasil. |
| Baris yang ditampilkan | Jumlah baris yang dihasilkan oleh operator ini |
| Jumlah eksekusi | Frekuensi operator dieksekusi. Beberapa eksekusi dapat berjalan secara paralel. |
Relasi kosong
empty relation tidak menampilkan baris. Operator ini adalah kasus khusus dari operator generate relation.
Kueri berikut menunjukkan operator ini:
SELECT *
FROM albums
LIMIT 0
/*
No result
*/
Rencana eksekusi akan muncul sebagai berikut:

Properti dan statistik eksekusi
Properti operator menjelaskan sifat yang digunakan saat operator dijalankan. Statistik eksekusi adalah nilai yang dikumpulkan selama eksekusi kueri untuk membantu Anda menilai performa operator.
Properti
| Nama | Deskripsi |
|---|---|
| Metode eksekusi | Dalam Eksekusi baris, operator memproses satu baris dalam satu waktu. Dalam Eksekusi batch, operator memproses batch baris sekaligus. |
Statistik eksekusi
| Nama | Deskripsi |
|---|---|
| Latensi | Waktu berlalu dari semua eksekusi yang dilakukan di operator. |
| Latensi kumulatif | Total waktu operator saat ini dan turunannya. |
| Waktu CPU | Jumlah waktu CPU yang dihabiskan untuk mengeksekusi operator. |
| Waktu CPU kumulatif | Total waktu CPU yang dihabiskan untuk mengeksekusi operator dan turunannya. |
| Waktu eksekusi | Total waktu yang diperlukan untuk menjalankan kueri dan memproses hasil. |
| Baris yang ditampilkan | Jumlah baris yang dihasilkan oleh operator ini |
| Jumlah eksekusi | Frekuensi operator dieksekusi. Beberapa eksekusi dapat berjalan secara paralel. |
Pindai
Operator scan memindai sumber baris dan menampilkannya. Berikut adalah jenis operator pemindaian:
- Pemindaian tabel: Memindai tabel.
- Pemindaian indeks: Memindai indeks.
- Pemindaian batch: Pemindaian terjadi pada tabel perantara yang dibuat oleh operator relasional lainnya (misalnya, tabel yang dibuat oleh cross apply terdistribusi).
Jika memungkinkan, Spanner menerapkan predikat pada kunci sebagai bagian dari pemindaian. Pemindaian dijalankan lebih efisien saat Spanner menerapkan predikat, karena pemindaian tidak perlu membaca seluruh tabel atau indeks. Predikat muncul dalam rencana eksekusi sebagai:
- Kondisi dapat dicari: Kondisi dapat dicari berlaku jika Spanner dapat menentukan baris tertentu yang akan diakses dalam tabel. Secara umum, hal ini
terjadi saat filter berada di awalan kunci utama. Misalnya, jika
kunci utama terdiri dari
Col1danCol2, maka klausaWHEREyang mencakup nilai eksplisit untukCol1, atauCol1danCol2dapat dicari. Dalam hal ini, Spanner hanya membaca data dalam rentang kunci.
Jika kueri harus mencari semua baris dalam tabel, pemindaian penuh akan terjadi, yang muncul
dalam rencana eksekusi sebagai full scan: true.
Kueri berikut menunjukkan operator ini:
SELECT s.lastname
FROM singers@{FORCE_INDEX=SingersByFirstLastName} as s
WHERE s.firstname = 'Catalina';
/*----------+
| LastName |
+----------+
| Smith |
+----------*/
Segmen rencana eksekusi akan muncul sebagai berikut:

Dalam rencana eksekusi, operator gabungan terdistribusi tingkat teratas mengirimkan sub-paket ke server jarak jauh. Setiap sub-rencana memiliki
operator serialize result
dan operator pemindaian indeks. Predikat
Key Predicate: FirstName = 'Catalina' membatasi pemindaian ke baris dalam indeks
SingersByFirstLastname yang memiliki FirstName sama dengan Catalina. Pemindaian
indeks menampilkan output ke operator hasil serialisasi.
Spanner menggabungkan pemindaian dengan Filter Scan dan menganggapnya sebagai satu operator. Jika tidak ada Kondisi Penelusuran, operator akan ditampilkan sebagai Pemindaian Penuh.
Properti dan statistik eksekusi
Properti operator menjelaskan sifat yang digunakan saat operator dijalankan. Statistik eksekusi adalah nilai yang dikumpulkan selama eksekusi kueri untuk membantu Anda menilai performa operator.
Operator Scan memiliki properti dan statistik eksekusi tambahan yang berbeda.Properti
| Nama | Deskripsi |
|---|---|
| Metode pemindaian | Dapat berupa Baris, Batch, atau Otomatis. Dalam eksekusi Baris, operator memproses satu baris dalam satu waktu. Dalam Eksekusi batch, operator memproses batch baris sekaligus. Dalam eksekusi Otomatis, operator mulai memindai menggunakan metode Baris, tetapi dapat beralih ke Batch jika diperlukan. |
| Kondisi pencarian | Predikat pada kunci utama yang digunakan untuk melakukan pencarian tabel yang efisien. Properti ini berarti seluruh tabel tidak perlu dipindai untuk menghasilkan kumpulan baris yang diinginkan. Properti ini hanya
berlaku untuk Table Scans dan Index Scans. |
| Penetapan variabel | Daftar kolom yang dibaca dari tabel. |
| Metode eksekusi | Dalam Eksekusi baris, operator memproses satu baris dalam satu waktu. Dalam Eksekusi batch, operator memproses batch baris sekaligus. |
Statistik eksekusi
| Nama | Deskripsi |
|---|---|
| Baris yang dipindai | Jumlah baris yang dibaca selama pemindaian. |
| Jumlah pencarian | Jumlah pencarian atau permintaan yang dilakukan oleh Operator Pemindaian ini. |
| Latensi | Waktu berlalu dari semua eksekusi yang dilakukan di operator. |
| Latensi kumulatif | Total waktu operator saat ini dan turunannya. |
| Waktu CPU | Jumlah waktu CPU yang dihabiskan untuk mengeksekusi operator. |
| Waktu CPU kumulatif | Total waktu CPU yang dihabiskan untuk mengeksekusi operator dan turunannya. |
| Waktu eksekusi | Total waktu yang diperlukan untuk menjalankan kueri dan memproses hasil. |
| Baris yang ditampilkan | Jumlah baris yang dihasilkan oleh operator ini |
| Jumlah eksekusi | Frekuensi operator dieksekusi. Beberapa eksekusi dapat berjalan secara paralel. |
Pindai filter
Operator pemindaian filter selalu muncul di atas pemindaian tabel atau indeks. Fungsi ini bekerja dengan pemindaian untuk mengurangi jumlah baris yang dibaca dari database, dan pemindaian yang dihasilkan biasanya lebih cepat daripada dengan filter. Spanner menerapkan pemindaian filter dalam kondisi tertentu:
- Kondisi residual: Kondisi lain saat Spanner dapat mengevaluasi pemindaian untuk membatasi jumlah data yang dibaca.
Kueri berikut menunjukkan operator ini:
SELECT lastname
FROM singers
WHERE singerid = 1
/*----------+
| LastName |
+----------+
| Richards |
+----------*/
Rencana eksekusi akan muncul sebagai berikut:

Properti dan statistik eksekusi
Properti operator menjelaskan sifat yang digunakan saat operator dijalankan. Statistik eksekusi adalah nilai yang dikumpulkan selama eksekusi kueri untuk membantu Anda menilai performa operator.
Operator Filter scan memiliki properti berbeda tambahan.Properti
| Nama | Deskripsi |
|---|---|
| Kondisi sisa | Predikat diterapkan setelah baris dibaca. |
| Metode eksekusi | Dalam Eksekusi baris, operator memproses satu baris dalam satu waktu. Dalam Eksekusi batch, operator memproses batch baris sekaligus. |
Statistik eksekusi
| Nama | Deskripsi |
|---|---|
| Latensi | Waktu berlalu dari semua eksekusi yang dilakukan di operator. |
| Latensi kumulatif | Total waktu operator saat ini dan turunannya. |
| Waktu CPU | Jumlah waktu CPU yang dihabiskan untuk mengeksekusi operator. |
| Waktu CPU kumulatif | Total waktu CPU yang dihabiskan untuk mengeksekusi operator dan turunannya. |
| Waktu eksekusi | Total waktu yang diperlukan untuk menjalankan kueri dan memproses hasil. |
| Baris yang ditampilkan | Jumlah baris yang dihasilkan oleh operator ini |
| Jumlah eksekusi | Frekuensi operator dieksekusi. Beberapa eksekusi dapat berjalan secara paralel. |