Bu sayfada, Query Explain ile yürütülen bir sorgunun çıkışı açıklanmaktadır. Sorgu Açıklama ile sorgu yürütmeyi öğrenmek için Sorgu Açıklama ile sorgu yürütmeyi analiz etme başlıklı makaleyi inceleyin.
Ortak Kavramlar
Aşağıdaki yaygın kavramlar ve terimler, yürütme ağacında kullanılır.
Satırlar ve kayıtlar
Satır ve kayıt terimleri, genel olarak bir dokümanı veya dizin girişini ifade etmek için kullanılır.
Değişkenler
$
, yürütme ağacında oluşturulan veya referans verilen bir değişkeni ifade eder. Örneğin: $foo_1
. Bu değişkenler genellikle bir belgenin içeriğine veya bir sorgunun yürütülmesi sırasında değerlendirilen bir ifadenin değerine atıfta bulunmak için kullanılır.
Aşağıdaki dahili değişkenler yürütme düğümlerinde görünebilir:
$__key__
-Anahtar, bir dokümanın dahili tanımlayıcısıdır. Bu, proje, veritabanı ve belgenin tam yoluyla birlikte mutlak ve benzersiz bir tanımlayıcıdır.$__id__
-Kimlik, koleksiyonundaki bir dokümanın benzersiz tanımlayıcısıdır. Bu, tek bir koleksiyon içinde benzersizdir.
__key__
belgesinden __id__
değerini hesaplamak için Compute
düğümünün kullanıldığı bir örneği ele alalım:
Compute
| $__id__1: _id($__key__)
| records returned: 1
Kısıtlamalar ve aralıklar
Bazı tarama düğümleri, taranan değer aralığını açıklamak için constraints
ve ranges
özelliklerini kullanır. Bu özellikler, değer listesi içeren bir aralık ağacı biçimini kullanır. Bu değerler, dizin tanımında görünen anahtarların sıralı listesine karşılık gelir. Örneğin, ağaçta görünen ilk aralık (burada (1..5]
), sıralı anahtar listesindeki ilk anahtarla (burada a
) ilgili kısıtlamalara karşılık gelir:
| index: type=CollectionGroupIndex, id=CICAgOjXh#EK, keys=[a ASC, b ASC, __key__ ASC]
| constraints: /
|----(1..5]
|----[1L]
Her girinti düzeyi, listedeki bir sonraki anahtara uygulanan kısıtlamayı gösterir. Köşeli parantezler dahil olan bir aralığı, yuvarlak parantezler ise hariç tutulan bir aralığı temsil eder. Bu durumda kısıtlama 1 < "a" <= 5
ve "b" = 1
olarak çevrilir.
Aşağıdaki a
için birden fazla dal içeren örnekte, kısıtlama 1 < a <= 5 OR a = 10
ile eşleşir:
| constraints: /
|----(1L, 5L]
|----[10L]
Temel Değişkenler
Bazı tarama düğümlerinde (ör. SequentialScan
), index
özelliğinin bir parçası olarak anahtar listesi ve Scan
düğümünde ayrı bir keys
özelliği bulunur. Scan
düğümündeki keys
özelliği, dizin tanımındaki her anahtarın değişken adını sırayla belirtir. Değişkenler, yürütme ağacında daha yukarıda taranan alanın çalışma zamanı değerlerine referans vermek için kullanılabilir.
Aşağıdaki örnekte, mevcut belge için user
alanının değeri $user_1
değişkeniyle, date_placed
alanının değeri ise $date_placed_1
değişkeniyle eşlenir.
index: type=CollectionGroupIndex, id=CICAgOjXh4EK, keys=[user ASC, date_placed ASC, __key__ ASC]
keys: [user ASC, date_placed ASC, __key__ ASC]
Yürütme düğümleri
Sorgu yürütme ağacı aşağıdaki düğümleri içerebilir.
SeekingScan
Döndürülen satırların dizinin tek bir sıralı aralığında olmayabileceği ve sorguyu karşılamak için birden fazla farklı tarama yapılması gereken dinamik bir taramayı temsil eder.
Örneğin, a
değerinin mevcut olduğu ve b
değerinin 1'e eşit olduğu bir sorgu, ["a" ASC, "b" ASC]
dizininde çalışırken a
değerinin her bir farklı değeri için ayrı ve potansiyel olarak sıralı olmayan bir aralığı tarayıp döndürmesi gerekir.
Bu, tam bir TableScan
işleminden daha verimli ancak ["b" ASC, "a" ASC]
bileşik dizininde tek bir SequentialScan
işleminden daha az verimlidir.
• SeekingScan
| constraints: /
|----(-∞..+∞)
|----[1L]
| index: type=CollectionGroupIndex, id=CAE, keys=[user ASC, quantity ASC, __key__ ASC]
| keys: [user ASC, quantity ASC, __key__ ASC]
| properties: Selection { user }
| records returned: 1
| records scanned: 1
SequentialScan
Depolamada tek bir okuma işlemiyle gerçekleştirilebilen statik ve sıralı bir satır aralığının taranmasını temsil eder.
key ordering length
, korunması ve orijinal anahtar sırasıyla döndürülmesi gereken anahtar sayısını ifade eder. [k1, k2, k3]
şeması için 0 anahtar sıralama uzunluğu, taramanın herhangi bir sırada döndürülebileceği, 1 ise k1'e göre sıralanabileceği ancak aynı k1 değerine sahip satırların herhangi bir sırada gelebileceği, 3 ise belgelerin tam sıralanmış sırada döndürüleceği anlamına gelir.
• SequentialScan
| index: type=CollectionGroupIndex, id=CAE, keys=[user ASC, date_placed ASC, __key__ ASC]
| key ordering length: 3
| keys: [user ASC, date_placed ASC, __key__ ASC]
| limit: 10
| properties: Selection { a }
| ranges: /
| records returned: 1
| records scanned: 1
UniqueScan
Satırların bellek içi tekilleştirilmesiyle depolama alanındaki statik ve sıralı bir satır aralığının taranmasını ifade eder.
• UniqueScan
| index: type=CollectionGroupIndex, id=CAE, keys=[user ASC, date_placed ASC, __key__ ASC]
| keys: [user ASC, date_placed ASC, __key__ ASC]
| properties: Selection { a }
| ranges: /
|----(-∞..+∞)
| records returned: 1
| records scanned: 1
TableAccess
Sağlanan satırın tanımlayıcısını birincil depolamadaki gerçek satır içerikleriyle yeniden birleştirir. Bir üst düğüm (veya son sorgu sonucu) dokümanlardaki alanların bir alt kümesini gerektiriyorsa TableAccess
zorunludur.
• TableAccess
| order: PRESERVE_INPUT_ORDER
| peak memory usage: 4.00 KiB (4,096 B)
| properties: *
| records returned: 1
LookupById
Yabancı bir koleksiyondaki dokümanları kimliklerine göre arayarak birleştirme işlemi gerçekleştirir. Aranacak kimlikler, giriş dokümanlarındaki bir alandan alınır. Arama sonuçları, giriş dokümanlarına yeni bir alan olarak eklenir.
• LookupById
| local_field: $localField_1
| foreign_datasource: (default)#/**/foreign
| output: $output_1
TableScan
Bir koleksiyonun tam ve sırasız taranması. Bir sorgu ilişkili dizin olmadan çalıştırıldığında kullanılır.
Sıra STABLE
veya UNDEFINED
olabilir. STABLE
, deterministik bir sıralamayı ifade eder.
• TableScan
| order: STABLE
| properties: *
| records returned: 1
| records scanned: 1
| source: (default)#/**/collection
HashAggregate
Toplama işlemlerinin karma destekli uygulanması. Sonucu döndürmeden önce grubun tamamının bellekte oluşturulmasını gerektirir ve sorgu bellek sınırını aşmamalıdır.
• HashAggregate
| aggregations: [sum($b_1) AS total]
| groups: [$a_1]
| peak memory usage: 4.00 KiB (4,096 B)
| records returned: 0
StreamAggregate
Yalnızca tek bir grubun durumunu aynı anda koruyan ve en yüksek bellek kullanımını azaltan özel toplama düğümü. Temel alınan alt düğüm grupları sırayla döndürdüğünde kullanılır. Örneğin, bir alanda dizin kullanırken bu alanın farklı değerlerine göre gruplandırma yapıldığında.
• StreamAggregate
| keys: [foo ASC, bar ASC]
| properties: Selection { baz }
| aggregations: [$sum($foo_1) AS baz]
MajorSort
Sabit bir özellik grubu üzerinde sıralama işlemi gerçekleştirir. Tüm kayıtları bellekte aynı anda oluşturur ve sıralanmış değerleri sırayla döndürür. Sıralama kümesinin boyutu, sorgu bellek sınırı ile sınırlıdır.
Sonraki bir sınır sağlandığında, bellek kullanımını azaltmak için bir top-k sıralama algoritması kullanılır. Bu yöntemle, dikkate alınan k öğenin depolanması için kullanılan bellek sınırı aşmadığı sürece rastgele büyük bir kayıt kümesinde sıralama yapılabilir.
• MajorSort
| fields: [a ASC, b DESC]
| limit: 10
| peak memory usage: 4.00 KiB (4,096 B)
| records returned: 1
Concat
Birden fazla alt düğümün sonuçlarını birleştirir ve sonucu üst düğüme döndürür. Bu düğüm, birden fazla çocukta görünen sonuçları tekilleştirmez ve döndürülen sonuçların sırası deterministik değildir.
• Concat
├── • TableAccess
...
├── • TableAccess
İşlem
Bir dizi ifadeyi değerlendirerek sonuçları bir dizi değişkene atar.
• Compute
| $user_1: user
| $full_name_1: str_concat($first_name_1, " ", $last_name_1)
| $address_1: UNSET
| records returned: 1
Filtre
Yalnızca sağlanan ifadeyle eşleşen satırları seçerek döndürür.
• Filter
| expression: $eq(foo, "bar")
| records returned: 1
Değerler
Üzerinde çalışılacak değişmez değerler dizisi oluşturur. Öncelikli olarak bir sorguya giriş olarak bir dizi belge listesi sağlandığında kullanılır.
• Values
| expression: [{__key__=/col/1}, {__key__=/col/2}]
İçinden Çıkarma
Alt düğüm tarafından üretilen değeri ayırır.
• Unnest
| expression: foo AS unnested_foo
Sınır
Üst düğüme döndürülen satır sayısını sınırlar.
• Limit
| limit: 10
| records returned: 1
Başlangıç
Alt düğüm tarafından üretilen belirli sayıda satırı atlar.
• Offset
| offset: 10
| records returned: 1