Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Cosmos DB, şema veya dizin yönetimiyle uğraşmak zorunda kalmadan uygulamanızda yineleme yapmanızı sağlayan şemadan bağımsız bir veritabanıdır. Bu, okuduktan sonra şema olarak da adlandırılır, yani verileriniz veritabanına yazıldığında Cosmos DB şema zorlamaz. Bunun yerine, verilerinizi okurken veya sorgularken veritabanından verileri seri durumdan çıkardığınızda şemanız uygulamanızda tanımladığınız sınıflara yansıtılır.
Microsoft Fabric'te Cosmos DB'de dizin oluşturma, verileriniz nasıl gelişirse gelişsin hızlı ve esnek sorgu performansı sunmak için tasarlanmıştır. Varsayılan olarak, Cosmos DB herhangi bir şema tanımlamak veya ikincil dizinleri yapılandırmak zorunda kalmadan kapsayıcınızdaki tüm öğeler için her özelliği otomatik olarak dizinler.
Kavramsal ağaç
Bir öğe kapsayıcıda her depolandığında, içeriği JSON belgesi olarak yansıtılır ve ardından ağaç gösterimine dönüştürülür. Bu dönüştürme, söz konusu öğenin her özelliğinin bir ağaçta düğüm olarak temsil olduğu anlamına gelir. Bir sözde kök düğüm, öğenin tüm birinci düzey özelliklerinin ebeveyni olarak oluşturulur. Yaprak düğümler, bir öğe tarafından taşınan gerçek skaler değerleri içerir.
Örneğin, şu öğeyi göz önünde bulundurun:
{
"locations": [
{
"country": "Germany",
"city": "Berlin"
},
{
"country": "France",
"city": "Paris"
}
],
"headquarters": {
"country": "Belgium",
"employees": 250
},
"exports": [
{
"city": "Moscow"
},
{
"city": "Athens"
}
]
}
Bu kavramsal ağaç örnek JSON öğesini temsil eder:
locations0-
country:Germany -
city:Berlin
-
1-
country:France -
city:Paris
-
headquarters-
country:Belgium -
employees:250
-
exports0-
city:Moscow
-
1-
city:Athens
-
Bir kök düğümü ile üç dalı gösteren ağaç diyagramı: "konumlar", "merkez", ve "ihracat." "Konumlar", her biri konumla ilgili iki alt düğüme ("Almanya veya Berlin" ve "Fransa veya Paris") sahip iki numaralı düğüme ayrılır. "Headquarters" konumu "Belçika" olan ve "çalışan sayısı" ("250") olan bir yerdir. "Exports", her biri numaralı olan iki düğüme ayrılır, bu düğümlerin her biri bir "şehir" alt düğümüne sahiptir ("Moskova" ve "Atina").
Dizilerin ağaçta nasıl kodlandığına dikkat edin: Bir dizideki her giriş, dizideki bu girdinin diziniyle etiketlenmiş bir ara düğüm alır. Örneğin, ilk girdi, 0 ikinci girdi ise şeklindedir 1.
Özellik yolları
Cosmos DB, sistemin bu ağaçlar içindeki yollarını kullanarak özelliklere başvurmasını sağladığından öğeleri ağaçlara dönüştürür. Bir özelliğin yolunu bulmak için, kök düğümden ilgili özelliğe doğru ağaç üzerinde ilerleyebilir ve kullandığımız her düğümün etiketini birleştirerek yolu oluşturabiliriz.
Aşağıda, daha önce açıklanan örnek öğeden her özelliğin yolları verilmiştir:
| Yol | Değer |
|---|---|
/locations/0/country |
"Germany" |
/locations/0/city |
"Berlin" |
/locations/1/country |
"France" |
/locations/1/city |
"Paris" |
/headquarters/country |
"Belgium" |
/headquarters/employees |
250 |
/exports/0/city |
"Moscow" |
/exports/1/city |
"Athens" |
Cosmos DB, bir öğe yazıldığında her özelliğin yolunu ve buna karşılık gelen değerini etkili bir şekilde dizinler.
Dizin türleri
Cosmos DB şu anda dört tür dizini desteklemektedir.
Dizin oluşturma ilkesini tanımlarken bu dizin türlerini yapılandırabilirsiniz.
Aralık dizini
Aralık dizinleri sıralı ağaç benzeri bir yapıyı temel alır. Bu varsayılan dizin türüdür ve dizin ilkesi tanımlanırken belirtilmesi gerekmez. Aralık dizin türü aşağıdakiler için kullanılır:
Eşitlik sorguları:
SELECT * FROM container c WHERE c.property = 'value'SELECT * FROM container c WHERE c.property IN ("value1", "value2", "value3")Dizi öğesinde eşitlik eşleşmesi
SELECT * FROM container c WHERE ARRAY_CONTAINS(c.tags, "tag1")Aralık sorguları:
SELECT * FROM container c WHERE c.property > 0Uyarı
>,<,>=,<=,!=için çalışırBir özelliğin varlığı denetleniyor:
SELECT * FROM container c WHERE IS_DEFINED(c.property)Dize sistemi işlevleri:
SELECT * FROM container c WHERE CONTAINS(c.property, "value")SELECT * FROM container c WHERE STRINGEQUALS(c.property, "value")ORDER BYSorgu:SELECT * FROM container c ORDER BY c.propertyJOINSorgu:SELECT d FROM container c JOIN d IN c.properties WHERE d = 'value'
Aralık dizinleri skaler değerlerde (dize veya sayı) kullanılabilir. Yeni oluşturulan kapsayıcıların varsayılan dizin oluşturma ilkesi tüm dizeler veya sayılar için aralık dizinlerini zorunlu tutar.
Uyarı
ORDER BY Tek bir özelliğe göre sıralayan bir koşul, her zaman bir aralık dizinine ihtiyaç duyar ve referans verdiği yolun dizini yoksa başarısız olur. Benzer şekilde, birden çok özelliğe göre sıralayan bir ORDER BY sorgu için her zaman bileşik dizin gerekir.
Uzamsal dizin
Uzamsal dizinler nokta, çizgi, çokgen ve çok kutuplu gibi jeo-uzamsal nesneler üzerinde verimli sorgular sağlar. Bu sorgular ST_DISTANCE, ST_WITHIN, ST_INTERSECTS anahtar sözcüklerini kullanır. Uzamsal dizin türünü kullanan bazı örnekler aşağıda verilmiştir:
Jeo-uzamsal uzaklık sorguları:
SELECT * FROM container c WHERE ST_DISTANCE(c.property, { "type": "Point", "coordinates": [0.0, 10.0] }) < 40Arama sorgularında mekansal analiz:
SELECT * FROM container c WHERE ST_WITHIN(c.property, {"type": "Point", "coordinates": [0.0, 10.0] })Jeo-uzamsal kesişme sorguları:
SELECT * FROM container c WHERE ST_INTERSECTS(c.property, { 'type':'Polygon', 'coordinates': [[ [31.8, -5], [32, -5], [31.8, -5] ]] })
Uzamsal dizinler doğru biçimlendirilmiş GeoJSON nesnelerinde kullanılabilir. Points, LineStrings, Polygons ve MultiPolygons şu anda desteklenmektedir.
Bileşik dizin
Bileşik dizinler, birden çok alanda işlem gerçekleştirirken verimliliği artırır. Bileşik dizin türü aşağıdakiler için kullanılır:
ORDER BYbirden çok özellik üzerinde sorgular:SELECT * FROM container c ORDER BY c.property1, c.property2ve
ORDER BYfiltreli sorgular. Filtre özelliği yan tümcesineORDER BYeklenirse bu sorgular bileşik dizin kullanabilir.SELECT * FROM container c WHERE c.property1 = 'value' ORDER BY c.property1, c.property2En az bir özelliğin eşitlik filtresi olduğu iki veya daha fazla özellikte filtre içeren sorgular:
SELECT * FROM container c WHERE c.property1 = 'value' AND c.property2 > 'value'
Bir filtre koşulu dizin türlerinden birini kullandığı sürece, sorgu altyapısı geri kalanını taramadan önce bunu değerlendirir. Örneğin, gibi SELECT * FROM c WHERE c.department = "Information Technology" and CONTAINS(c.team, "Pilot")bir SQL sorgunuz varsa:
Bu sorgu ilk olarak dizini kullanarak girişler
department = "Information Technology"için bir filtre uygular. Ardından, tümdepartment = "Information Technology"girişleriniCONTAINSfiltre koşulunu değerlendirmek için takip eden bir işlem hattından geçirir.Tam tarama gerçekleştiren
CONTAINSgibi işlevleri kullanırken, sorguları hızlandırabilir ve tam kapsayıcı taramaları önleyebilirsiniz. Bu sorguları hızlandırmak için dizini kullanan daha fazla filtre koşulu ekleyebilirsiniz. Filtre cümlelerinin sıralaması önemli değildir. Sorgu altyapısı hangi önkoşulların daha seçici olduğunu anlayıp sorguyu buna göre çalıştırır.
Vektör dizini
Vektör dizinleri, sistem işlevini kullanarak VECTORDISTANCE vektör aramaları yaparken verimliliği artırır. Vektör araması, vektör dizini kullanılırken daha düşük gecikme süresine, daha yüksek aktarım hızına ve daha az RU tüketimine sahiptir. Cosmos DB, boyutu 4.096 boyutun altındaki tüm vektör eklemelerini (metin, görüntü, çok modüllü vb.) destekler.
ORDER BYvektör arama sorguları:SELECT TOP 10 * FROM container c ORDER BY VECTORDISTANCE(c.vector1, c.vector2)Vektör arama sorgularındaki benzerlik puanının projeksiyonu:
SELECT TOP 10 c.name, VECTORDISTANCE(c.vector1, c.vector2) AS score FROM container c ORDER BY VECTORDISTANCE(c.vector1, c.vector2)Benzerlik puanındaki aralık filtreleri.
SELECT TOP 10 * FROM container c WHERE VECTORDISTANCE(c.vector1, c.vector2) > 0.8 ORDER BY VECTORDISTANCE(c.vector1, c.vector2)
Önemli
Vektör ilkeleri ve vektör dizinleri oluşturma işleminden sonra sabittir. Değişiklik yapmak için yeni bir koleksiyon oluşturun.
Dizin kullanımı
Sorgu altyapısının sorgu filtrelerini en verimliden en az verimliye doğru sıralanmış olarak değerlendirebileceği beş yöntem vardır:
- Dizin arama
- Kesin dizin taraması
- Genişletilmiş dizin taraması
- Tam dizin taraması
- Tam tarama
Özellik yollarını dizine aldığınızda, sorgu altyapısı dizini otomatik olarak mümkün olduğunca verimli bir şekilde kullanır. Yeni özellik yollarını dizine eklemenin yanı sıra sorguların dizini kullanma biçimini iyileştirmek için herhangi bir şey yapılandırmanız gerekmez. Sorgunun RU ücreti, hem dizin kullanımından gelen RU ücretinin hem de öğeleri yüklemenin RU ücretinin bir bileşimidir.
Aşağıdaki tabloda, Cosmos DB'de dizinlerin farklı şekillerde kullanıldığı özetlenir:
| Arama türü | Açıklama | Yaygın örnekler | Dizin kullanımından ücret | İşlemsel veri deposundan öğe yükleme ücretleri |
|---|---|---|---|---|
| Dizin arama | Yalnızca gerekli dizine alınan değerleri okuyun ve işlem veri deposundan yalnızca eşleşen öğeleri yükleyin | Eşitlik filtreleri, IN | Eşitlik filtresi başına sabit | Sorgu sonuçlarındaki öğe sayısına göre artar |
| Kesin dizin taraması | Dizine alınan değerlerin ikili araması ve yalnızca işlem veri deposundan eşleşen öğeleri yükleme | Aralık karşılaştırmaları (>, <, <=veya >=), StartsWith | Dizin aramasıyla karşılaştırıldığında, dizine alınan özelliklerin kardinalitesine bağlı olarak biraz artar. | Sorgu sonuçlarındaki öğe sayısına göre artar |
| Genişletilmiş dizin taraması | Dizine alınan değerler için iyileştirilmiş arama (ancak ikili aramadan daha az verimli) ve işlem veri deposundan yalnızca eşleşen öğeleri yükleme | StartsWith (büyük/küçük harfe duyarlı değil), StringEquals (büyük/küçük harfe duyarlı değil) | Dizine alınan özelliklerin kardinalitesine göre biraz artar | Sorgu sonuçlarındaki öğe sayısına göre artar |
| Tam dizin taraması | Ayrı dizinlenmiş değer kümesini okuyun ve işlem veri deposundan yalnızca eşleşen öğeleri yükleyin | İçerir, SonaErerile, RegexEşleşmesi, LIKE | Dizine alınan özelliklerin kardinalitesine göre doğrusal olarak artar | Sorgu sonuçlarındaki öğe sayısına göre artar |
| Tam tarama | İşlem veri deposundaki tüm öğeleri yükleme | Üst, Alt | Mevcut Değil | Kapsayıcıdaki öğe sayısına göre artar |
Sorgular yazarken, dizini olabildiğince verimli kullanan filtreleme öngörülerini kullanmalısınız. Örneğin, StartsWith veya Contains kullanım durumunuzda işe yarıyorsa, tam dizin taraması yerine kesin bir dizin taraması yaptığı için StartsWith’yi tercih etmelisiniz.
Dizin kullanımı ayrıntıları
Tip
Bu bölüm sorguların dizinleri nasıl kullandığı hakkında daha fazla ayrıntıyı kapsar. Cosmos DB'yi kullanmaya başlamayı öğrenmek için bu ayrıntı düzeyi gerekli değildir, ancak meraklı kullanıcılar için ayrıntılı olarak belgelenmiştir. Bu belgenin önceki bölümlerinde paylaşılan örnek öğeye başvuruyoruz:
Şu iki örnek öğeyi göz önünde bulundurun:
[
{
"id": 1,
"locations": [
{ "country": "Germany", "city": "Berlin" },
{ "country": "France", "city": "Paris" }
],
"headquarters": { "country": "Belgium", "employees": 250 },
"exports": [
{ "city": "Moscow" },
{ "city": "Athens" }
]
},
{
"id": 2,
"locations": [
{ "country": "Ireland", "city": "Dublin" }
],
"headquarters": { "country": "Belgium", "employees": 200 },
"exports": [
{ "city": "Moscow" },
{ "city": "Athens" },
{ "city": "London" }
]
}
]
Cosmos DB ters dizin kullanır. Dizin, her JSON yolunu bu değeri içeren öğe kümesine eşleyerek çalışır. Öğe kimliği eşlemesi, kapsayıcı için birçok farklı dizin sayfasında temsil edilir. Aşağıda, iki örnek öğe içeren kapsayıcıya yönelik ters dizine ilişkin örnek bir diyagram verilmişti:
| Yol | Değer | Öğe tanımlayıcıları listesi |
|---|---|---|
/locations/0/country |
Germany |
[1] |
/locations/0/country |
Ireland |
[2] |
/locations/0/city |
Berlin |
[1] |
/locations/0/city |
Dublin |
[2] |
/locations/1/country |
France |
[1] |
/locations/1/city |
Paris |
[1] |
/headquarters/country |
Belgium |
[1, 2] |
/headquarters/employees |
200 |
[2] |
/headquarters/employees |
250 |
[1] |
Ters çevrilmiş dizinin iki önemli özniteliği vardır:
Belirli bir yol için değerler artan düzende sıralanır. Bu nedenle, sorgu altyapısı dizinden kolayca hizmet
ORDER BYverebilir.Belirli bir yol için sorgu altyapısı, sonuçların bulunduğu dizin sayfalarını tanımlamak için farklı olası değerler kümesini tarar.
Sorgu altyapısı, ters çevrilmiş dizini dört farklı şekilde kullanabilir:
Dizin arama
Aşağıdaki sorguyu göz önünde bulundurun:
SELECT
location
FROM
location IN company.locations
WHERE
location.country = 'France'
Sorgu koşulu (herhangi bir konumun bölgesi olarak "Fransa" olan öğelere göre filtreleme), burada belirtilen yol ile eşleşir:
locations1-
country:France
-
Bir kök düğümü ile üç dalı gösteren ağaç diyagramı: "konumlar", "merkez", ve "ihracat." "Konumlar", her biri konumla ilgili iki alt düğüme ("Almanya/Berlin" ve "Fransa/Paris") sahip iki numaralı düğüme ayrılır. "Headquarters" konumu "Belçika" olan ve "çalışan sayısı" ("250") olan bir yerdir. "Exports", her biri numaralı olan iki düğüme ayrılır, bu düğümlerin her biri bir "şehir" alt düğümüne sahiptir ("Moskova" ve "Atina"). "Konumlar", "1", konum ve "Fransa" yolu vurgulanır.
Bu sorguda eşitlik filtresi olduğundan, bu ağaçtan geçiş yaptıktan sonra sorgu sonuçlarını içeren dizin sayfalarını hızla tanımlayabiliriz. Bu durumda sorgu altyapısı, Öğe 1 içeren dizin sayfalarını okur. Dizin arama, dizini kullanmanın en verimli yoludur. Dizin aramasıyla yalnızca gerekli dizin sayfalarını okur ve sorgu sonuçlarındaki öğeleri yükleriz. Bu nedenle, toplam veri hacminden bağımsız olarak dizin arama süresi ve dizin aramasından gelen RU ücreti inanılmaz derecede düşüktür.
Kesin dizin taraması
Aşağıdaki sorguyu göz önünde bulundurun:
SELECT
*
FROM
company
WHERE
company.headquarters.employees > 200
Sorgu koşulu (200'den fazla çalışanın bulunduğu öğelere göre filtreleme), headquarters/employees yolunun kesin dizin taramasıyla değerlendirilebilir. Kesin bir dizin taraması yaparken sorgu altyapısı, 200 yolu için değerin headquarters/employees konumunu bulmak üzere, farklı olası değerler kümesinde ikili arama yapmaya başlar. Her yolun değerleri artan düzende sıralandığından, sorgu altyapısının ikili arama yapması kolaydır. Sorgu altyapısı değerini 200buldukktan sonra kalan tüm dizin sayfalarını (artan yönde) okumaya başlar.
Sorgu altyapısı gereksiz dizin sayfalarını taramaktan kaçınmak için ikili arama gerçekleştirebildiğinden, kesin dizin taramaları dizin arama işlemleri için benzer gecikme süresine ve RU ücretlerine sahip olma eğilimindedir.
Genişletilmiş dizin taraması
Aşağıdaki sorguyu göz önünde bulundurun:
SELECT
*
FROM
company
WHERE
STARTSWITH(company.headquarters.country, "United", true)
Sorgu önermesi (büyük/küçük harfe duyarsız "United" ile başlayan bir konumda merkezi olan öğelere filtre uygulama), headquarters/country yolundaki genişletilmiş dizin taramasıyla değerlendirilebilir. Genişletilmiş dizin taraması yapılan işlemlerin, her dizin sayfasını tarama gereksinimini önlemeye yardımcı olabilecek iyileştirmeleri vardır, ancak kesin bir dizin taramasının ikili aramasından biraz daha pahalıdır.
Örneğin, büyük/küçük harfe duyarsız StartsWithdeğerini değerlendirirken, sorgu altyapısı büyük ve küçük harf değerlerinin farklı olası bileşimleri için dizini denetler. Bu iyileştirme, sorgu altyapısının çoğu dizin sayfasını okumasını önler. Farklı sistem işlevleri, her dizin sayfasını okumaktan kaçınmak için kullanabileceği farklı iyileştirmelere sahiptir, bu nedenle genişletilmiş dizin taraması olarak geniş bir kategoriye ayrılmıştır.
Tam dizin taraması
Aşağıdaki sorguyu göz önünde bulundurun:
SELECT
*
FROM
company
WHERE
CONTAINS(company.headquarters.country, "United")
Sorgu koşulu (merkezi "United" içeren bir konumda bulunan öğelerin filtrelenmesi), headquarters/country yolunun dizininin taranmasıyla değerlendirilebilir. Tam dizin taramasının aksine, tam dizin taraması sonuçların bulunduğu dizin sayfalarını tanımlamak için her zaman farklı olası değerler kümesini tarar. Bu durumda, dizin üzerinde CONTAINS çalıştırılır. Dizin taramaları için dizin arama süresi ve RU ücreti, yolun kardinalitesi arttıkça artar. Başka bir deyişle, sorgu altyapısının taraması gereken olası benzersiz değerler ne kadar yüksek olursa, tam dizin taraması yaparken gecikme süresi ve RU ücreti o kadar yüksek olur.
Örneğin, iki özelliği göz önünde bulundurun: town ve country. Şehrin kardinalitesi 5.000 ve kardinalitesi country 200'dür. Aşağıda, her birinde bir CONTAINS sistem işlevinin town özelliği üzerinde tam dizin taraması yaptığı iki örnek sorgu verilmiştir. şehrin kardinalitesi değerinden yüksek countryolduğundan ilk sorgu ikinci sorgudan daha fazla istek birimi (RU) kullanır.
SELECT
*
FROM
container c
WHERE
CONTAINS(c.town, "Red", false)
SELECT
*
FROM
c
WHERE
CONTAINS(c.country, "States", false)
Tam tarama
Bazı durumlarda, sorgu altyapısı dizini kullanarak bir sorgu filtresini değerlendiremeyebilir. Bu durumda sorgu filtresinin değerlendirilmesi için sorgu altyapısının işlem deposundaki tüm öğeleri yüklemesi gerekir. Tam taramalar dizini kullanmaz ve toplam veri boyutuyla doğrusal olarak artan bir RU ücretine sahiptir. Neyse ki, tam tarama gerektiren işlemler nadirdir.
Tanımlı vektör dizini olmayan vektör arama sorguları
Vektör dizin ilkesi tanımlamaz ve bir VECTORDISTANCE sistem işlevini bir ORDER BY yan tümcesinde kullanırsanız, bu sorgu tam tarama ile sonuçlanır ve bu durumda, vektör dizin ilkesi tanımladığınızdan daha yüksek bir RU ücretine sahip olur. Vektör yolu için tanımlanmış bir VECTORDISTANCE dizininiz yoksa ve ile brute force boolean değeri flat olarak ayarlanmışsa, tam tarama gerçekleşir.
Karmaşık filtre ifadelerine sahip sorgular
Önceki örneklerde yalnızca basit filtre ifadelerine sahip sorguları (örneğin, tek bir eşitliğe veya aralık filtresine sahip sorgular) ele almıştık. Gerçekte çoğu sorguda çok daha karmaşık filtre ifadeleri vardır.
Aşağıdaki sorguyu göz önünde bulundurun:
SELECT
*
FROM
company
WHERE
company.headquarters.employees = 200 AND CONTAINS(company.headquarters.country, "United")
Bu sorguyu yürütmek için sorgu altyapısı üzerinde bir dizin araması headquarters/employees ve üzerinde headquarters/countrytam dizin taraması yapmalıdır. Sorgu altyapısı, sorgu filtresi ifadesini mümkün olduğunca verimli bir şekilde değerlendirmek için kullandığı iç buluşsal yöntemlere sahiptir. Bu durumda sorgu altyapısı, önce dizin aramasını yaparak gereksiz dizin sayfalarını okuma gereksinimini ortadan kaldıracak. Örneğin, eşitlik filtresiyle yalnızca 50 öğe eşleşmişse, sorgu altyapısının yalnızca bu 50 öğeyi içeren dizin sayfalarında değerlendirmesi CONTAINS gerekir. Kapsayıcının tamamının dizin taramasının tam olarak yapılması gerekmez.
Skaler toplama işlevleri için dizin kullanımı
Toplama işlevlerine sahip sorguların kullanabilmesi için yalnızca dizine güvenmesi gerekir.
Bazı durumlarda dizin hatalı pozitifler döndürebilir. Örneğin, dizinde değerlendirme CONTAINS yaparken, dizindeki eşleşme sayısı sorgu sonuçlarının sayısını aşabilir. Sorgu altyapısı tüm dizin eşleşmelerini yükler, yüklenen öğelerdeki filtreyi değerlendirir ve yalnızca doğru sonuçları döndürür.
Çoğu sorguda hatalı pozitif dizin eşleşmelerinin yüklenmesi dizin kullanımı üzerinde belirgin bir etkiye sahip değildir.
Örneğin, aşağıdaki sorguyu göz önüne alın:
SELECT
*
FROM
company
WHERE
CONTAINS(company.headquarters.country, "United")
CONTAINS Sistem işlevi bazı hatalı pozitif eşleşmeler döndürebilir, bu nedenle sorgu altyapısının yüklenen her öğenin filtre ifadesiyle eşleşip eşleşmediğini doğrulaması gerekir. Bu örnekte sorgu altyapısının yalnızca fazladan birkaç öğe yüklemesi gerekebilir, bu nedenle dizin kullanımı ve RU ücreti üzerindeki etkisi çok azdır.
Ancak, toplama işlevlerine sahip sorguların kullanabilmesi için yalnızca dizine güvenmesi gerekir. Örneğin, COUNT ile birlikte bir agregat içeren aşağıdaki sorguyu değerlendirin.
SELECT
COUNT(1)
FROM
company
WHERE
CONTAINS(company.headquarters.country, "United")
İlk örnekte olduğu gibi, CONTAINS sistem işlevi bazı hatalı pozitif eşleşmeler döndürebilir. Ancak sorgudan SELECT * farklı olarak sorgu, COUNT tüm dizin eşleşmelerini doğrulamak için yüklenen öğelerdeki filtre ifadesini değerlendiremez. Sorgu yalnızca COUNT dizine bağlı olmalıdır, bu nedenle bir filtre ifadesinin hatalı pozitif eşleşmeler döndürme olasılığı varsa, sorgu altyapısı tam taramaya başvurur.
Aşağıdaki toplama işlevlerine sahip sorguların yalnızca dizine bağlı olması gerekir, bu nedenle bazı sistem işlevlerinin değerlendirilmesi tam tarama gerektirir.