Sorgu performansını optimize etme

Yalnızca Cloud Firestore Enterprise sürümü için geçerlidir.

Yavaş sorgularla ilgili sorunları gidermek için sorgu yürütme planını ve çalışma zamanı yürütme profilini elde etmek üzere Sorgu Açıklaması'nı kullanın. Aşağıdaki bölümde, yürütme profiline bağlı olarak sorgu performansını optimize etmek için uygulayabileceğiniz adımlar açıklanmaktadır:

Sonuç sayısını sınırlama

Sorgunun çok sayıda doküman döndürüp döndürmediğini belirlemek için yürütme ağacındaki döndürülen kayıtlar alanını kullanın. $limit ifadesini kullanarak döndürülen belge sayısını sınırlayabilirsiniz. Bu, sonuçlar ağ üzerinden istemcilere döndürüldüğünde sonuçların seri hale getirilmiş bayt boyutunu azaltır. Limit düğümünden önce MajorSort düğümünün geldiği durumlarda sorgu motoru, Limit ve MajorSort düğümlerini birleştirebilir ve tam bellek içi somutlaştırma ile sıralamayı TopN sıralamasıyla değiştirerek sorgu için bellek gereksinimini azaltabilir.

Sonuç Belgesinin Boyutunu Sınırlama

Gereksiz alanların getirilmesini önlemek için $project ifadesini kullanarak döndürülen belgenin boyutunu sınırlayabilirsiniz. Bu, ara sonuçların işlenmesiyle ilgili işlem ve bellek maliyetini azaltmaya yardımcı olur. Ayrıca, sonuçlar ağ üzerinden istemcilere döndürüldüğünde sonuçların seri hale getirilmiş bayt boyutunu da azaltır. Sorguda referans verilen tüm alanların normal bir dizin (çok anahtarlı olmayan) tarafından kapsandığı durumlarda, sorgunun dizin taraması tarafından tamamen kapsanmasına da olanak tanınır. Böylece, belgelerin birincil depolama alanından getirilmesine gerek kalmaz.

Dizinleri kullanma

Dizinleri oluşturmak ve optimize etmek için aşağıdaki talimatları uygulayın.

Sorgunun dizin kullanıp kullanmadığını belirleme

Sorgunun bir dizin kullanıp kullanmadığını, yürütme ağacındaki yaprak düğümleri kontrol ederek belirleyebilirsiniz. Yürütme ağacının yaprak düğümü bir TableScan düğümü ise sorgunun dizin kullanmadığı ve birincil depolamadaki dokümanları taradığı anlamına gelir. Bir dizin kullanılıyorsa yürütme ağacının yaprak düğümünde dizinin dizin kimliği ve dizin alanları gösterilir.

Kullanılan dizinin optimize edilip edilemeyeceğini belirleme

Bir dizin, sorgu motorunun birincil depolamadan getirmesi gereken doküman sayısını azaltabiliyorsa veya alan sıralaması, sorgunun sıralama koşulunu karşılayabiliyorsa sorgu için yararlıdır.

Bir sorgu için dizin kullanılıyorsa ancak sorgu motoru, çok sayıda kayıt döndüren bir tarama düğümünün ardından az sayıda kayıt döndüren bir filtre düğümü ile tanımlandığı gibi, yine de birçok belgeyi getirip atıyorsa bu, dizin kullanılarak karşılanan sorgu yükleminin seçici olmadığına dair bir işarettir. Daha uygun bir dizin oluşturmak için Dizin oluşturma başlıklı makaleyi inceleyin.

Bir sorgu için çok anahtarlı olmayan bir dizin kullanılıyorsa ancak sorgu motoru, sorgu yürütme ağacındaki bir MajorSort düğümü ile tanımlandığı gibi sonuç kümesinin bellek içi yeniden sıralamasını yapmaya devam ediyorsa bu, kullanılan dizinin sorgunun Sıralama şartını karşılamak için kullanılamadığının bir işaretidir. Daha uygun bir dizin oluşturmak için sonraki bölüme bakın.

Dizin Oluşturma

Dizin oluşturmak için dizin yönetimi dokümanlarını inceleyin. Sorgunuzun dizinleri kullanabilmesi için aşağıdaki sırayla alanlar içeren normal (çok anahtarlı olmayan) dizinler oluşturun:

  1. Eşitlik operatörlerinde kullanılacak tüm alanlar. Sorgular arasında yeniden kullanım şansını en üst düzeye çıkarmak için alanları, sorgular arasındaki eşitlik operatörlerinde alanların oluşma sıklığına göre azalan düzende sıralayın.
  2. Sıralanacak tüm alanlar (aynı sırada).
  3. Sorgu kısıtlaması seçiciliğinin azalan sırasına göre aralık veya eşitsizlik operatörlerinde kullanılacak alanlar.
  4. Dizindeki bir sorgunun parçası olarak döndürülecek alanlar: Bu tür alanların dizine eklenmesi, dizinin sorguyu kapsamasına ve belgenin birincil depolama alanından getirilmesine gerek kalmamasına olanak tanır.

Dizi alanlarının filtrelenmesini ve sıralanmasını içeren sorgular için çok anahtarlı dizinler oluşturmayı düşünebilirsiniz.

Sorgu ipucunu kullanma

Sorgu için daha uygun bir dizin oluşturduysanız ancak sorgu motoru bu dizini kullanmıyorsa sorgu ipucu kullanarak sorgu motorunun dizin tercihini geçersiz kılabilirsiniz.

Query Explain ile yürütülen bir sorgunun çıkışı hakkında daha fazla bilgi için Sorgu yürütme referansı başlıklı makaleyi inceleyin.