MongoDB - NoSQL - użycie explain()

0

Za pomocą pętli utworzyłem kolekcję.

for (var i = 1; i <= 30000; i++) {db.liczby.insert( { x : i } )}

Następnie proste zapytanie

db.liczby.find( {$and:[{"x":{$gte:10000}}, {"x":{$lte:15000}}]})

I teraz tak: wykorzystaj metodę explain by otrzymać informacje o wykonaniu ostatniego zadania.

db.liczby.find().explain()

Później otworzenie indeksów, i ponownie explain.

db.liczby.createIndex({x:1})
db.liczby.find().explain()

Tyle, że wyniki explain się nie różnią, a powinny.
Zgodnie z dokumentacją:

Stages are descriptive of the operation; e.g.
COLLSCAN for a collection scan
IXSCAN for scanning index keys
FETCH for retrieving documents
SHARD_MERGE for merging results from shards
SHARDING_FILTER for filtering out orphan documents from shards

A jak widać dla obu jest COLLSCAN.

0

W jaki sposób indeks miałby wpłynąć na wynik zapytania, które tak czy siak musi zwrócić wszystkie wiersze? :-P

0

Zapytanie nie zwraca wszystkich wierszy - 5000 spośród 30000.

No właśnie tego nie wiem.
Miałem znaleźć różnicę. Spodziewam się jej, ale nie widzę.
Więc nie wiem czy błędne założenie czy też coś źle wykonałem.

0

Zapytanie nie zwraca wszystkich wierszy - 5000 spośród 30000.

Nieprawda: db.liczby.find() zwraca wszystkie wiersze, stąd explain na tym właśnie zapytaniu nie będzie próbował wykorzystać indeksu.

Uruchom za to db.liczby.find( {$and:[{"x":{$gte:10000}}, {"x":{$lte:15000}}]}).explain() ;-)

0
Patryk27 napisał(a):

Zapytanie nie zwraca wszystkich wierszy - 5000 spośród 30000.

Nieprawda: db.liczby.find() zwraca wszystkie wiersze, stąd explain na tym właśnie zapytaniu nie będzie próbował wykorzystać indeksu.

Uruchom za to db.liczby.find( {$and:[{"x":{$gte:10000}}, {"x":{$lte:15000}}]}).explain() ;-)

No i podziękował :)
Po prostu użyłem explain() nie z tym zapytaniem co trzeba.

1 użytkowników online, w tym zalogowanych: 0, gości: 1