Zbyt dodać trochę więcej do Baloo „s odpowiedź.
W przypadku znacznika czasu i dłuższego wydania. Ogólnie serwer MongoDB nie zauważy różnicy. Długość kodowania BSON jest taka sama (64 bity). Możesz zobaczyć wydajność różniącą się po stronie klienta w zależności od kodowania sterownika. Na przykład po stronie Java przy użyciu sterownika 10gen znacznik czasu jest renderowany jako Date
, który jest dużo cięższy niż Long
. Istnieje drivers, które próbują uniknąć tego nad głową.
Inną kwestią jest zwiększenie wydajności w przypadku zamknięcia zakresu pierwszego pola indeksu. Więc jeśli używasz indeksu sugeruje Baloo:
db.collection.ensureIndex({start: 1, final: 1})
kwerendy wystąpi (potencjalnie dużo) lepiej, jeśli zapytanie jest:
db.collection.find({start:{$gt:DateTime(...),$lt:DateTime(...)},
final:{$lt:DateTime(...)}})
koncepcyjnym, jeśli myślisz o indeksach jak aa drzewo zamknięty zasięg ogranicza obie strony drzewa zamiast jednej strony. Bez zamkniętego zakresu serwer musi "sprawdzić" wszystkie wpisy z wartością większą niż podany znacznik czasu, ponieważ nie zna zależności między start
i final
.
Można nawet stwierdzić, że wydajność zapytań nie jest lepiej przy użyciu jednego wskaźnika pola jak:
db.collection.ensureIndex({start: 1})
większość oszczędności wynosi od przycinania pierwszego pola. Przypadku, w którym nie ma to miejsca, jest sytuacja, gdy kwerenda jest objęta indeksem, a kolejność/sortowanie wyników można uzyskać z indeksu.
HTH - Rob.
Tak, wiem o indeksie composit. Jedyne, czego obawiam się w tym przypadku, nie będzie korzyści dla zapytania złożonego w pojedynczym zapytaniu polowym. Ale nie wiem na pewno. Pomyśl o niektórych eksperymentach. –
Dopóki pojedyncze pole jest pierwszym polem w indeksie złożonym, dobrze jest przejść – baloo