aggregation framework - MongoDB Aggregate Slow Performance When Using Sort -
i have collection (tvshow episodes) more 1,200,000 document,
here schema :
var episodeschema = new schema({ imdbid: { type : string }, showid: {type : string}, episodeid: { type : string }, episodeidnumber:{ type : number }, episodetitle:{ type : string }, showtitle:{type : string}, seasonnumber:{type : number}, episodenumber:{type : number}, airdate : {type : string}, summary:{type : string} });
i created index episodetitle
episodeidnumber
seasonnumber
episodenumber
episodeid
, showid
now used mongodb aggregate group every tvshow episodes
here aggregate query used :
episode.aggregate( [ { $match : { showid : "scorpion" } }, {$sort:{"episodenumber":-1}}, { $group: { _id: "$seasonnumber", count: { $sum: 1 } , episodes : { $push: { episodeid : "$episodeid" , episodetitle: "$episodetitle" , episodenumber: "$episodenumber" , seasonnumber: "$seasonnumber" , airdate: "$airdate" } } } } , { $sort : { _id : -1 } } ] )
now when run query take more 2605.907 ms
, after digging found out why slow , because of using {$sort:{"episodenumber":-1}}
, without using {$sort:{"episodenumber":-1}}
take around 19.178 ms
run.
as mentioned above create index episodenumber
field , based on mongodb aggregation pipeline optimization used sort
after match
ok , , didn't wrong.
so after thought wrong indexes , removed episodenumber
index , reindexd , had same time nothing changed.
at end 1 time tried run aggregate group query without episodenumber
indexed , surprisingly faster ! take around 20.118 ms
.
i wants know why happened , isn't indexes faster query ?
update
query explain output :
{ "waitedms" : numberlong(0), "stages" : [ { "$cursor" : { "query" : { "showid" : "scorpion" }, "sort" : { "episodenumber" : -1 }, "fields" : { "airdate" : 1, "episodeid" : 1, "episodenumber" : 1, "episodetitle" : 1, "seasonnumber" : 1, "_id" : 0 }, "queryplanner" : { "plannerversion" : 1, "namespace" : "test.episodes", "indexfilterset" : false, "parsedquery" : { "showid" : { "$eq" : "scorpion" } }, "winningplan" : { "stage" : "eof" }, "rejectedplans" : [ ] } } }, { "$group" : { "_id" : "$seasonnumber", "count" : { "$sum" : { "$const" : 1 } }, "episodes" : { "$push" : { "episodeid" : "$episodeid", "episodetitle" : "$episodetitle", "episodenumber" : "$episodenumber", "seasonnumber" : "$seasonnumber", "airdate" : "$airdate" } } } }, { "$sort" : { "sortkey" : { "_id" : -1 } } } ], "ok" : 1 }
Comments
Post a Comment