Azure Cosmos DB ile sorgu performansını ayarlama

UYGULANDıĞı YER: SQL API

Azure Cosmos DB, şema veya ikincil dizinler gerekmeden verileri sorgulamak için SQL bir apısağlar. Bu makalede geliştiriciler için aşağıdaki bilgiler sağlanmaktadır:

  • Azure Cosmos DB SQL sorgu yürütmesinin nasıl çalıştığı hakkında üst düzey ayrıntılar
  • Sorgu isteği ve yanıt üstbilgileri ve istemci SDK seçenekleri hakkındaki ayrıntılar
  • sorgu performansı için İpuçları ve en iyi uygulamalar
  • sorgu performansının hatalarını ayıklamak için SQL yürütme istatistikleriyle nasıl yararlanmanın örnekleri

SQL sorgu yürütme hakkında

Azure Cosmos DB, verileri kapsayıcılarda depoladığınızda, bu, herhangi bir depolama boyutuna veya istek aktarımhızına genişleyebilirler. Azure Cosmos DB, verilerin büyümesini veya sağlanan aktarım hızını artırmak için, kapakların altındaki fiziksel bölümlerdeki verileri sorunsuzca ölçeklendirir. REST API veya desteklenen SQL sdk 'lardanbirini kullanarak herhangi bir kapsayıcıya SQL sorguları verebilirsiniz.

Bölümlendirme hakkında kısa bir genel bakış: "şehir" gibi bir bölüm anahtarı tanımlayarak verilerin fiziksel bölümler arasında nasıl bölüneceği belirlenir. Tek bir bölüm anahtarına ait veriler (örneğin, "City" = = "Seattle") fiziksel bir bölüm içinde depolanır, ancak genellikle tek bir fiziksel bölümde birden çok bölüm anahtarı bulunur. Bir bölüm, depolama boyutuna ulaştığında, bu bölümü iki yeni bölüme sorunsuz bir şekilde ayırır ve bölüm anahtarını bu bölümlere eşit olarak böler. Bölümler geçici olduğundan, API 'Ler bölüm anahtarı karmalarının aralıklarını gösteren bir "bölüm anahtar aralığı" soyutlamasını kullanır.

Azure Cosmos DB bir sorgu verdiğinizde, SDK şu mantıksal adımları gerçekleştirir:

  • sorgu yürütme planını öğrenmek için SQL sorgusunu ayrıştırın.
  • Sorgu, gibi bölüm anahtarına karşı bir filtre içeriyorsa SELECT * FROM c WHERE c.city = "Seattle" , tek bir bölüme yönlendirilir. Sorgunun bölüm anahtarı üzerinde bir filtresi yoksa, bu, tüm bölümlerde yürütülür ve sonuçlar birleştirilmiş istemci tarafındadır.
  • Sorgu, istemci yapılandırmasına bağlı olarak, serideki her bölümde veya paralel olarak yürütülür. Her bölümde sorgu karmaşıklık, yapılandırılan sayfa boyutu ve koleksiyonun sağlanmış iş hacmi temelinde bir veya daha fazla gidiş dönüş yapabilir. Her yürütme, sorgu yürütme tarafından tüketilen istek birimi sayısını ve isteğe bağlı olarak sorgu yürütme istatistiklerini döndürür.
  • SDK, bölümler arasında sorgu sonuçlarının özetlemesini gerçekleştirir. Örneğin, sorgu bölümler arasında bir SıRALAMA içeriyorsa, tek tek bölümlerin sonuçları birleştirme-genel olarak sıralanmış sırada sonuçları döndürecek şekilde sıralanır. Sorgu, gibi bir toplamadır COUNT , her bölümden alınan sayımlar, genel sayıyı oluşturmak için toplanır.

SDK 'lar sorgu yürütme için çeşitli seçenekler sağlar. Örneğin, .NET ' te bu seçenekler FeedOptions sınıfında mevcuttur. Aşağıdaki tabloda bu seçenekler ve sorgu yürütme süresini nasıl etkilediği açıklanmaktadır.

Seçenek Açıklama
EnableCrossPartitionQuery Birden fazla bölüm genelinde yürütülmesi gereken herhangi bir sorgu için true olarak ayarlanmalıdır. Bu, geliştirme sırasında bilinçli performans avantajları yapmanız için açık bir bayrak sağlar.
EnableScanInQuery Dizin oluşturmayı kabul ettiyseniz, ancak yine de sorguyu bir tarama yoluyla çalıştırmak istiyorsanız, true olarak ayarlanmalıdır. Yalnızca istenen filtre yolu için dizin oluşturma devre dışıysa geçerlidir.
MaxItemCount Sunucuya gidiş dönüş başına döndürülecek en fazla öğe sayısı. -1 ' i ayarlayarak, sunucunun öğe sayısını yönetmesine izin verebilirsiniz. Ya da bu değeri, gidiş dönüş başına yalnızca az sayıda öğe almak için düşürebilirsiniz.
MaxBufferedItemCount Bu bir istemci tarafı seçeneğidir ve çapraz bölüm SıRALAMA gerçekleştirirken bellek tüketimini sınırlamak için kullanılır. Daha yüksek bir değer, çapraz bölümlü sıralama gecikmesini azaltmaya yardımcı olur.
MaxDegreeOfParallelism Azure Cosmos veritabanı hizmetinde paralel sorgu yürütme sırasında istemci tarafında çalışan eşzamanlı işlem sayısını alır veya ayarlar. Pozitif Özellik değeri, küme değeri ile eşzamanlı işlem sayısını sınırlar. 0 ' dan küçük olarak ayarlandıysa, sistem, çalıştırılacak eşzamanlı işlem sayısına otomatik olarak karar verir.
PopulateQueryMetrics Sorgu yürütmenin derleme süresi, Dizin döngüsü süresi ve belge yükleme süresi gibi çeşitli aşamalarda harcanan sürenin ayrıntılı olarak günlüğe kaydedilmesini sunar. Sorgu performans sorunlarını tanılamak için, Azure desteği ile sorgu istatistikleriyle çıkış paylaşabilirsiniz.
RequestContinuation Sorgu yürütmeyi, herhangi bir sorgu tarafından döndürülen donuk devamlılık belirtecini geçirerek devam ettirebilirsiniz. Devamlılık belirteci, sorgu yürütmesi için gereken tüm durumu kapsüller.
ResponseContinuationTokenLimitInKb Sunucu tarafından döndürülen devamlılık belirtecinin maksimum boyutunu sınırlayabilirsiniz. Uygulama ana bilgisayarınızda yanıt üst bilgisi boyutu sınırları varsa bunu ayarlamanız gerekebilir. Bu ayar, sorgu için tüketilen toplam süreyi ve RUs düzeyini artırabilir.

Örneğin, bölüm anahtarı olarak bir koleksiyonda istenen bölüm anahtarı üzerinde örnek bir sorgu ele alalım /city ve 100.000 ru/s işleme ile sağlanır. Aşağıdaki gibi .NET ' i kullanarak bu sorguyu isteyebilirsiniz CreateDocumentQuery<T> :

IDocumentQuery<dynamic> query = client.CreateDocumentQuery(
    UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName), 
    "SELECT * FROM c WHERE c.city = 'Seattle'", 
    new FeedOptions 
    { 
        PopulateQueryMetrics = true, 
        MaxItemCount = -1, 
        MaxDegreeOfParallelism = -1, 
        EnableCrossPartitionQuery = true 
    }).AsDocumentQuery();

FeedResponse<dynamic> result = await query.ExecuteNextAsync();

Yukarıda gösterilen SDK kod parçacığı, aşağıdaki REST API isteğine karşılık gelir:

POST https://arramacquerymetrics-westus.documents.azure.com/dbs/db/colls/sample/docs HTTP/1.1
x-ms-continuation: 
x-ms-documentdb-isquery: True
x-ms-max-item-count: -1
x-ms-documentdb-query-enablecrosspartition: True
x-ms-documentdb-query-parallelizecrosspartitionquery: True
x-ms-documentdb-query-iscontinuationexpected: True
x-ms-documentdb-populatequerymetrics: True
x-ms-date: Tue, 27 Jun 2017 21:52:18 GMT
authorization: type%3dmaster%26ver%3d1.0%26sig%3drp1Hi83Y8aVV5V6LzZ6xhtQVXRAMz0WNMnUuvriUv%2b4%3d
x-ms-session-token: 7:8,6:2008,5:8,4:2008,3:8,2:2008,1:8,0:8,9:8,8:4008
Cache-Control: no-cache
x-ms-consistency-level: Session
User-Agent: documentdb-dotnet-sdk/1.14.1 Host/32-bit MicrosoftWindowsNT/6.2.9200.0
x-ms-version: 2017-02-22
Accept: application/json
Content-Type: application/query+json
Host: arramacquerymetrics-westus.documents.azure.com
Content-Length: 52
Expect: 100-continue

{"query":"SELECT * FROM c WHERE c.city = 'Seattle'"}

her sorgu yürütme sayfası POST , üst bilgiyle bir REST API Accept: application/query+json ve gövdedeki SQL sorgusuna karşılık gelir. Her sorgu sunucuya bir veya daha fazla gidiş dönüş yapar x-ms-continuation ve bu belirteç, istemci ile sunucu arasında, yürütmeyi sürdürmesini sağlar. Feedoseçeneklerindeki yapılandırma seçenekleri sunucuya istek üstbilgileri biçiminde geçirilir. Örneğin, MaxItemCount öğesine karşılık gelir x-ms-max-item-count .

İstek, aşağıdaki (okunabilirlik için kesildi) yanıtı döndürür:

HTTP/1.1 200 Ok
Cache-Control: no-store, no-cache
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: application/json
Server: Microsoft-HTTPAPI/2.0
Strict-Transport-Security: max-age=31536000
x-ms-last-state-change-utc: Tue, 27 Jun 2017 21:01:57.561 GMT
x-ms-resource-quota: documentSize=10240;documentsSize=10485760;documentsCount=-1;collectionSize=10485760;
x-ms-resource-usage: documentSize=1;documentsSize=884;documentsCount=2000;collectionSize=1408;
x-ms-item-count: 2000
x-ms-schemaversion: 1.3
x-ms-alt-content-path: dbs/db/colls/sample
x-ms-content-path: +9kEANVq0wA=
x-ms-xp-role: 1
x-ms-documentdb-query-metrics: totalExecutionTimeInMs=33.67;queryCompileTimeInMs=0.06;queryLogicalPlanBuildTimeInMs=0.02;queryPhysicalPlanBuildTimeInMs=0.10;queryOptimizationTimeInMs=0.00;VMExecutionTimeInMs=32.56;indexLookupTimeInMs=0.36;documentLoadTimeInMs=9.58;systemFunctionExecuteTimeInMs=0.00;userFunctionExecuteTimeInMs=0.00;retrievedDocumentCount=2000;retrievedDocumentSize=1125600;outputDocumentCount=2000;writeOutputTimeInMs=18.10;indexUtilizationRatio=1.00
x-ms-request-charge: 604.42
x-ms-serviceversion: version=1.14.34.4
x-ms-activity-id: 0df8b5f6-83b9-4493-abda-cce6d0f91486
x-ms-session-token: 2:2008
x-ms-gatewayversion: version=1.14.33.2
Date: Tue, 27 Jun 2017 21:59:49 GMT

Sorgudan döndürülen anahtar yanıt üstbilgileri şunları içerir:

Seçenek Açıklama
x-ms-item-count Yanıtta döndürülen öğe sayısı. Bu, sağlanan x-ms-max-item-count en yüksek yanıt yükü boyutu, sağlanan aktarım hızı ve sorgu yürütme süresi içinde olabilecek öğelerin sayısına bağlıdır.
x-ms-continuation: Ek sonuçlar varsa sorgunun yürütülmesini sürdürecek devamlılık belirteci.
x-ms-documentdb-query-metrics Yürütmenin sorgu istatistikleri. Bu, sorgu yürütmenin çeşitli aşamalarında harcanan sürenin istatistiklerini içeren, ayrılmış bir dizedir. x-ms-documentdb-populatequerymetricsOlarak ayarlandıysa döndürüldü True .
x-ms-request-charge Sorgu tarafından tüketilen istek birimi sayısı.

REST API istek üstbilgileri ve seçenekleriyle ilgili ayrıntılar için, bkz. REST API kullanarak kaynakları sorgulama.

Sorgu performansı için en iyi uygulamalar

sorgu performansını Azure Cosmos DB etkileyen en yaygın etmenler aşağıda verilmiştir. Bu makaledeki konuların her birini daha ayrıntılı bir şekilde inceleyeceğiz.

Faktör İpucu
Sağlanan aktarım hızı Sorgu başına RU ile ölçüm yapın ve sorgularınız için gereken sağlanmış iş hızına sahip olduğunuzdan emin olun.
Bölümlendirme ve bölüm anahtarları Filtre yan tümcesindeki bölüm anahtarı değeri için düşük gecikme süresine sahip sorguları tercih edin.
SDK ve sorgu seçenekleri Doğrudan bağlantı gibi SDK en iyi yöntemlerini izleyin ve istemci tarafı sorgu yürütme seçeneklerini ayarlayın.
Dizin Oluşturma İlkesi Sorgu için gerekli dizin oluşturma yollarına/ilkesine sahip olduğunuzdan emin olun.
Sorgu yürütme ölçümleri Sorgu ve veri şekillerinin olası yeniden yazar durumunu belirlemek için sorgu yürütme ölçümlerini çözümleyin.

Sağlanan aktarım hızı

Cosmos DB, her biri istek birimi (RU) saniye başına belirtilen ayrılmış aktarım hızı ile veri kapsayıcıları oluşturursunuz. 1 KB 'lik bir belgenin okunması 1 RU ve her işlem (sorgular dahil), karmaşıklığına göre sabit bir RU sayısına normalleştirilir. Örneğin, Kapsayıcınız için sağlanan 1000 RU/sn 'niz varsa ve 5 RU kullanan bir sorgunuz varsa SELECT * FROM c WHERE c.city = 'Seattle' , saniye başına bu sorgular (1000 ru/s)/(5 ru/sorgu) = 200 sorgu/s gerçekleştirebilirsiniz.

200 ' den fazla sorgu/sn gönderirseniz, hizmet 200/s 'ye göre hız sınırlaması gelen istekleri başlatır. SDK 'lar geri alma/yeniden deneme gerçekleştirerek bu durumu otomatik olarak işler, bu nedenle bu sorgular için daha fazla gecikme fark edebilirsiniz. Sağlanan aktarım hızını gerekli değere yükseltmek, sorgu gecikme süresini ve aktarım hızını geliştirir.

İstek birimleri hakkında daha fazla bilgi için bkz. İstek birimleri.

Bölümlendirme ve bölüm anahtarları

Azure Cosmos DB, genellikle sorguları en hızlı/en verimli ve daha düşük ve daha az verimli bir şekilde gerçekleştirir.

  • Tek bir bölüm anahtarına ve öğe anahtarına al
  • Tek bir bölüm anahtarında Filter yan tümcesi içeren sorgu
  • Herhangi bir özellikte eşitlik veya Aralık filtresi yan tümcesi olmadan sorgu
  • Filtre olmadan sorgulama

Tüm bölümlere ilgilenilmesi gereken sorgular daha fazla gecikme süresine gerek duyar ve daha yüksek bir RUs tüketebilir. Her bölüm tüm özelliklere göre otomatik dizine sahip olduğu için sorgu bu durumda dizinden verimli bir şekilde hizmet kullanılabilir. Paralellik seçeneklerini kullanarak bölümlere daha hızlı yayılan sorgular yapabilirsiniz.

Bölümleme ve bölüm anahtarları hakkında daha fazla bilgi edinmek için bkz. Azure Cosmos DB'de bölümleme.

SDK ve sorgu seçenekleri

Azure İpuçları DB'den en iyi istemci tarafı performansı elde etmek için bkz. Performans Cosmos testi. Buna en son SDK'leri kullanma, varsayılan bağlantı sayısı, çöp toplama sıklığı gibi platforma özgü yapılandırmalar yapılandırma ve Doğrudan/TCP gibi basit bağlantı seçeneklerinin kullanımı dahildir.

En Fazla Öğe Sayısı

Sorgular için değerinin MaxItemCount bitiş sorgu süresi üzerinde önemli bir etkisi olabilir. Sunucuya yapılan her gidiş dönüş, içinde öğe sayısından fazla (Varsayılan değer MaxItemCount 100 öğe) dönmez. Bunu daha yüksek bir değere (-1 en yüksek değerdir ve önerilir) ayarlarsanız, özellikle büyük sonuç kümelerine sahip sorgular için sunucu ile istemci arasındaki gidiş dönüş sayısı sınırlanarak sorgu sürenizi genel olarak geliştirebilirsiniz.

IDocumentQuery<dynamic> query = client.CreateDocumentQuery(
    UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName), 
    "SELECT * FROM c WHERE c.city = 'Seattle'", 
    new FeedOptions 
    { 
        MaxItemCount = -1, 
    }).AsDocumentQuery();

Maksimum Paralellik Derecesi

Sorgular için, özellikle bölümler arası sorgular (bölüm anahtarı değeri üzerinde filtre olmadan) gerçekleştirecek şekilde, uygulamanıza en iyi MaxDegreeOfParallelism yapılandırmaları belirlemek üzere ayarını gerçekleştirin. MaxDegreeOfParallelism maksimum paralel görev sayısını (yani paralel olarak ziyaret edilen bölüm sayısı üst sayısını) kontrol eder.

IDocumentQuery<dynamic> query = client.CreateDocumentQuery(
    UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName), 
    "SELECT * FROM c WHERE c.city = 'Seattle'", 
    new FeedOptions 
    { 
        MaxDegreeOfParallelism = -1, 
        EnableCrossPartitionQuery = true 
    }).AsDocumentQuery();

Şunu varsayalım:

  • D = Varsayılan En fazla paralel görev sayısı (= istemci makinedeki toplam işlemci sayısı)
  • P = Kullanıcı tarafından belirtilen maksimum paralel görev sayısı
  • N = Sorguyu yanıtlamak için ziyaret edilen bölüm sayısı

Aşağıda, paralel sorguların farklı P değerleri için nasıl davranacağının etkileri verilmektedir.

  • (P == 0) => Modu
  • (P == 1) => Görev üst sayısı
  • (P > 1) => Min (P, N) paralel görevleri
  • (P < 1) => Min (N, D) paralel görevleri

SDK sürüm notları ve uygulanan sınıflar ve yöntemlerle ilgili ayrıntılar için bkz. SQL SDK'ları

Ağ gecikmesi

Genel Cosmos ayarlama ve en yakın bölgeye bağlanma hakkında bilgi için bkz. Azure Cosmos DB genel dağıtımı. Birden çok gidiş dönüş yapmak veya sorgudan büyük bir sonuç kümesi almak için ağ gecikmesi sorgu performansını önemli ölçüde etkiler.

Sorgu yürütme ölçümlerinin bölümünde sorguların sunucu yürütme süresi ( ) alınarak sorgu yürütmede harcanan süre ile ağ geçişte harcanan süre arasında ayrım yapmak için nasıl totalExecutionTimeInMs alınacakları açıklanır.

Dizin oluşturma ilkesi

Bkz. Yolları, türleri ve modları dizinleme için dizin oluşturma ilkesi yapılandırma ve bunların sorgu yürütmeyi nasıl etkileyeleri. Varsayılan olarak dizin oluşturma ilkesi, eşitlik sorguları için etkili olan dizeler için aralık dizini oluşturma kullanır. Dizeler için aralık sorgularına ihtiyacınız varsa tüm dizeler için Aralık dizin türünü belirtmenizi öneririz.

Varsayılan olarak, Azure Cosmos DB tüm verilere otomatik dizinleme uygulayacak. Yüksek performanslı ekleme senaryoları için yolları dışlamayı göz önünde bulundurarak her ekleme işlemi için RU maliyetini düşürebilir.

Sorgu yürütme ölçümleri

İsteğe bağlı üst bilgiyi (.NET SDK'sı içinde) geçerek x-ms-documentdb-populatequerymetrics sorgu FeedOptions.PopulateQueryMetrics yürütmeyle ilgili ayrıntılı ölçümleri elde edebilirsiniz. içinde döndürülen değer, x-ms-documentdb-query-metrics sorgu yürütmenin gelişmiş sorun giderme adımları için aşağıdaki anahtar-değer çiftlerini içerir.

IDocumentQuery<dynamic> query = client.CreateDocumentQuery(
    UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName), 
    "SELECT * FROM c WHERE c.city = 'Seattle'", 
    new FeedOptions 
    { 
        PopulateQueryMetrics = true, 
    }).AsDocumentQuery();

FeedResponse<dynamic> result = await query.ExecuteNextAsync();

// Returns metrics by partition key range Id
IReadOnlyDictionary<string, QueryMetrics> metrics = result.QueryMetrics;

Metric Birim Description
totalExecutionTimeInMs milisaniye Sorgu yürütme süresi
queryCompileTimeInMs milisaniye Sorgu derleme zamanı
queryLogicalPlanBuildTimeInMs milisaniye Mantıksal sorgu planı oluşturma zamanı
queryPhysicalPlanBuildTimeInMs milisaniye Fiziksel sorgu planı oluşturma zamanı
queryOptimizationTimeInMs milisaniye Sorguyu iyileştirmeye harcanan süre
VMExecutionTimeInMs milisaniye Sorgu çalışma zamanında harcanan süre
indexLookupTimeInMs milisaniye Fiziksel dizin katmanında harcanan süre
documentLoadTimeInMs milisaniye Belgeleri yüklerken harcanan süre
systemFunctionExecuteTimeInMs milisaniye Sistem (yerleşik) işlevlerinin yürütülmesi için milisaniye cinsinden harcanan toplam süre
userFunctionExecuteTimeInMs milisaniye Kullanıcı tanımlı işlevlerin yürütülmesi için milisaniye cinsinden harcanan toplam süre
retrievedDocumentCount count Alınan toplam belge sayısı
retrievedDocumentSize Bayt Alınan belgelerin bayt cinsinden toplam boyutu
outputDocumentCount count Çıkış belgelerinin sayısı
writeOutputTimeInMs milisaniye Çıkışı milisaniye cinsinden yazmak için harcanan süre
indexUtilizationRatio oran (<=1) Filtreyle eşlenmiş belge sayısının yüklenen belge sayısına oranı

İstemci SDK'leri, her bölüm içinde sorguyu hizmet etmek için dahili olarak birden çok sorgu işlemleri oluşturabilir. Toplam sonuç, bölüm için sağlanan aktarım hızını aşarsa veya sorgu yükü sayfa başına en büyük boyuta ulaşırsa veya sorgu sistem tarafından ayrılan zaman aşımı sınırına ulaşırsa, istemci bölüm başına birden fazla çağrı x-ms-max-item-count yapar. Her kısmi sorgu yürütmesi, bu sayfa x-ms-documentdb-query-metrics için bir döndürür.

Burada bazı örnek sorgular ve sorgu yürütmeden döndürülen bazı ölçümlerin nasıl yorumlanması gerekir:

Sorgu Örnek Ölçüm Description
SELECT TOP 100 * FROM c "RetrievedDocumentCount": 101 TOP yan tümcesi ile eşleşmesi için alınan belgelerin sayısı 100+1'tir. Sorgu süresi çoğunlukla ve WriteOutputTime tarama DocumentLoadTime olduğu için harcandı.
SELECT TOP 500 * FROM c "RetrievedDocumentCount": 501 RetrievedDocumentCount artık daha yüksektir (TOP yan tümcesi ile eşleşmesi için 500+1).
SELECT * FROM c WHERE c.N = 55 "IndexLookupTime": "00:00:00.0009500" Üzerinde dizin araması olduğundan, anahtar arama için IndexLookupTime içinde yaklaşık 0,9 ms /N/? harcanıyor.
SELECT * FROM c WHERE c.N > 55 "IndexLookupTime": "00:00:00.0017700" Bir aralık taraması üzerinden IndexLookupTime içinde biraz daha zaman (1,7 ms) harcandı çünkü bu, üzerinde bir dizin /N/? aramasıdır.
SELECT TOP 500 c.N FROM c "IndexLookupTime": "00:00:00.0017700" Önceki sorgular DocumentLoadTime ile aynı süre harcanıyor, ancak yalnızca bir özellik WriteOutputTime projesinde olduğundan daha düşük.
SELECT TOP 500 udf.toPercent(c.N) FROM c "UserDefinedFunctionExecutionTime": "00:00:00.2136500" Her değeri üzerinde UDF'nin yürütülmesi için yaklaşık 213 ms UserDefinedFunctionExecutionTime c.N harcanıyor.
SELECT TOP 500 c.Name FROM c WHERE STARTSWITH(c.Name, 'Den') "IndexLookupTime": "00:00:00.0006400", "SystemFunctionExecutionTime": "00:00:00.0074100" üzerinde yaklaşık 0,6 ms IndexLookupTime /Name/? harcandı. içinde sorgu yürütme zamanlarının çoğu (~7 SystemFunctionExecutionTime ms).
SELECT TOP 500 c.Name FROM c WHERE STARTSWITH(LOWER(c.Name), 'den') "IndexLookupTime": "00:00:00", "RetrievedDocumentCount": 2491, "OutputDocumentCount": 500 Sorgu, kullandığı için tarama olarak gerçekleştirilir ve LOWER alınan 2491 belgeden 500'ü döndürülür.

Sonraki adımlar