MongoDB - NoSQL - użycie explain()

Odpowiedz Nowy wątek
2019-06-03 15:22
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.

edytowany 4x, ostatnio: aPsikus, 2019-06-03 15:39

Pozostało 580 znaków

2019-06-03 16:14
0

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


Pozostało 580 znaków

2019-06-03 16:32
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.

edytowany 1x, ostatnio: aPsikus, 2019-06-03 16:34

Pozostało 580 znaków

2019-06-03 17:30
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() ;-)


edytowany 1x, ostatnio: Patryk27, 2019-06-03 17:30

Pozostało 580 znaków

2019-06-11 18:56
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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