Sorgu yürütme referansı

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