php mongodb 总记录数,php – MongoDB记录太多了?

为了总结聊天室的后续行动,问题实际上与find()查询相关,该查询正在扫描所有~500k文档以查找15:

db.tweet_data.find({

$or:

[

{ in_reply_to_screen_name: /^kunalnayyar$/i, handle: /^kaleycuoco$/i, id: { $gt: 0 } },

{ in_reply_to_screen_name: /^kaleycuoco$/i, handle: /^kunalnayyar$/i, id: { $gt: 0 } }

],

in_reply_to_status_id_str: { $ne: null }

} ).explain()

{

"cursor" : "BtreeCursor id_1",

"nscanned" : 523248,

"nscannedObjects" : 523248,

"n" : 15,

"millis" : 23682,

"nYields" : 0,

"nChunkSkips" : 0,

"isMultiKey" : false,

"indexOnly" : false,

"indexBounds" : {

"id" : [

[

0,

1.7976931348623157e+308

]

]

}

}

建议的方法:

>创建小写handle_lc和inreply_lc字段以进行搜索

>在这些上添加compound index:

db.tweet.ensureIndex({handle_lc:1,inreply_lc:1})

>复合索引的顺序允许通过句柄或(句柄,in_reply_to)有效地查找所有推文

>按完全匹配而不是正则表达式搜索:

db.tweet_data.find({         $或:         [            {in_reply_to_screen_name:’kunalnayyar’,句柄:’kaleycuoco’,id:{$gt:0}},            {in_reply_to_screen_name:’kaleycuoco’,句柄:’kunalnayyar’,id:{$gt:0}}        ]     })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值