我注意到如果使用OR运算符和SORT运算符,Mongodb 2.2似乎不会使用索引。我想知道这个JIRA是否与它有关。
让我解释一下:
db.messages.ensureIndex({ 'to_id':1, 'sent_date':-1});
db.messages.ensureIndex({ 'from_id':1, 'sent_date':-1});
好的,我们在邮件集合上有索引。
db.messages.find( {$or: [{'to_id':ObjectId("5124c7a1afaf46ffbd90b470")}]} ).sort({'sent_date':-1}).explain()
{
"cursor" : "BtreeCursor to_id_1_sent_date_-1",
db.messages.find( {$or: [{'from_id':ObjectId("5124c7a1afaf46ffbd90b470")}]} ).sort({'sent_date':-1}).explain()
{
"cursor" : "BtreeCursor from_id_1_sent_date_-1",
确定如此查询然后按sent_date排序使用BtreeCursor。
db.messages.find( {$or: [{'to_id':ObjectId("5124c7a1afaf46ffbd90b470")}, {'from_id':ObjectId("5124c7a1afaf46ffbd90b470")}]} ).explain()
{
"clauses" : [
{
"cursor" : "BtreeCursor to_id_1",
使用to_id或from_id的查询也可以使用BtreeCursor。
db.messages.find( {$or: [{'to_id':ObjectId("5124c7a1afaf46ffbd90b470")}, {'from_id':ObjectId("5124c7a1afaf46ffbd90b470")}]} ).sort({'sent_date':-1}).explain()
{
"cursor" : "BasicCursor",
FAIL!带有to_id或from_id的查询和排序不使用索引。为什么呢?
我的问题: