Neden dizinler
İki önemli noktayı anlayın.
- Bir indeks indeks olmamasından daha iyi olsa da, doğru indeks her ikisinden de çok daha iyidir.
- MongoDB, sorgu başına yalnızca bir dizin kullanacak ve muhtemelen kullanmak istediğinizi uygun alan sıralamasıyla bileşik dizinler oluşturacaktır.
Dizinler ücretsiz değildir. Hafızayı alırlar ve ekleme, güncelleme ve silme işlemleri yaparken performans cezası verirler. Normalde performans isabeti ihmal edilebilir düzeydedir (özellikle okuma performansındaki kazançlarla karşılaştırıldığında), ancak bu, dizinlerimizi oluşturma konusunda akıllı olamayacağımız anlamına gelmez.
Nasıl Dizinler
Hangi alan grubunun birlikte dizine eklenmesi gerektiğini belirlemek, çalıştırmakta olduğunuz sorguları anlamakla ilgilidir. Dizininizi oluşturmak için kullanılan alanların sırası kritiktir. İyi haber şu ki, sırayı yanlış anlarsanız, endeks hiç kullanılmayacak, bu yüzden açıklamayla fark edilmesi kolay olacak.
Neden Sıralama
Sorgularınızın Sıralama gerektirebilir. Ancak sıralama pahalı bir işlem olabilir, bu nedenle sıraladığınız alanları tıpkı sorguladığınız bir alan gibi ele almak önemlidir. Yani indeksi varsa daha hızlı olacaktır. Yine de önemli bir fark vardır, sıraladığınız alan dizininizdeki son alan olmalıdır. Bu kuralın tek istisnası, alanın da sorgunuzun bir parçası olması durumunda, son olması gereken kuralın uygulanmamasıdır.
Nasıl Sıralama
Dizinin tüm anahtarlarında veya bir alt kümede bir sıralama belirtebilirsiniz; ancak, sıralama anahtarları dizinde göründükleri sırayla listelenmelidir. Örneğin, bir dizin anahtarı kalıbı {a: 1, b: 1}, {a: 1, b: 1} 'de sıralamayı destekleyebilir ancak {b: 1, a: 1}' de desteklemez.
Sıralama, tüm anahtarları için indeks anahtarı modeli olarak aynı sıralama yönünü (yani artan / azalan) belirtmeli veya indeks anahtarı modeli olarak tüm anahtarları için ters sıralama yönünü belirtmelidir. Örneğin, bir dizin anahtarı kalıbı {a: 1, b: 1}, {a: 1, b: 1} ve {a: -1, b: -1} 'de sıralamayı destekleyebilir ancak {a: -1'de desteklemez , b: 1}.
Şu dizinlerin olduğunu varsayalım:
{ a: 1 }
{ a: 1, b: 1 }
{ a: 1, b: 1, c: 1 }
Example Index Used
db.data.find().sort( { a: 1 } ) { a: 1 }
db.data.find().sort( { a: -1 } ) { a: 1 }
db.data.find().sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: -1, b: -1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: 1, b: 1, c: 1 } ) { a: 1, b: 1, c: 1 }
db.data.find( { a: { $gt: 4 } } ).sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
1, 3, 2, 6, 5, 4, 7
?