질문 : (타임 스탬프) 나는 5 개 항목 지난 싶어MongoDB : 여러 키를 기준으로 정렬 할 때 인덱스가 사용되지 않는 이유는 무엇입니까?
> db.events.ensureIndex({'ts': -1})
: 나는 필드 ts
에 의해 색인되어 매우 큰 컬렉션이 있습니다.
> db.events.find().sort({'ts': -1}).limit(5)
> db.events.find().sort({'_id': -1}).limit(5)
인가 : 무엇 나를 놀라게하는 쿼리가 인덱스를 사용하지 않는다는 것입니다 매우 느린 따라서이다 : 예상대로
> db.events.find().sort({'ts': -1, '_id': -1}).limit(5)
그러나, 단지 ts
또는 다른 필드에 의해 정렬이 인덱스를 사용 이것은 MongoDB의 버그입니다. 이건 실제로 문서화 된 기능입니까, 아니면 제가 잘못하고있는 것입니까?
추가 정보 :
> db.events.find().sort({'ts': -1, '_id': -1}).limit(5).explain()
{
"cursor" : "BasicCursor",
"nscanned" : 795609,
"nscannedObjects" : 795609,
"n" : 5,
"scanAndOrder" : true,
"millis" : 22866,
"nYields" : 73,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
}
}
> db.events.find().sort({'ts': -1}).limit(5).explain()
{
"cursor" : "BtreeCursor ts_-1",
"nscanned" : 5,
"nscannedObjects" : 5,
"n" : 5,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"ts" : [
[
{
"$maxElement" : 1
},
{
"$minElement" : 1
}
]
]
}
}
을이 참 답변입니다 - 내가 관계형 DB를 추측 나를 버릇이 ... :) 감사합니다! – johndodo
정렬 열이 인덱스의 마지막 열이어야하는 이유는 무엇입니까? –