MongoDB中索引的一點記錄

在MongoDB中使用了一個聯合索引,發現了一些問題,記錄一下,方便以後查閱!

首先來看錶的說明:

wKiom1L95zyxvvZaAAOGvQeki6I411.jpg

注意高亮出的索引:

prop.lis_sta_1_prop.is_recom_-1_prop.re_t_-1_prop.post_t_-1,這4個字段分別是

帖子狀態、推薦狀態,推薦時間,發貼時間

測試了一下,有以下結果

可以使用上面索引的查詢:

db.post.find({'prop.lis_sta'{$in[5]}}).sort({'prop.is_recom':-1,'prop.re_t':-1,'prop.post_t':-1}).explain();
db.post.find({'prop.lis_sta':5}).sort({'prop.is_recom':-1,'prop.re_t':-1,'prop.post_t':-1}).explain();
db.post.find({'prop.lis_sta'{$in[0,5]}}).sort({'prop.is_recom':-1,'prop.re_t':-1,'prop.post_t':-1}).limit(20).explain();

不可以使用上面索引的查詢:

db.post.find({'prop.lis_sta'{$in[0,5]}}).sort({'prop.is_recom':-1,'prop.re_t':-1,'prop.post_t':-1}).explain();

wKioL1L96OyhbV_pAAElaIR42Xg779.jpg


所以在這裏說明幾點:
1)、儘量避免以靈活的參數的形式傳遞排序規則,如果數據比較多的話,卻沒有建立相關索引,容易產生問題。
2)、修改了排序規則,要檢查索引,通過explain來測試一下。
3)、使用已有索引過濾掉儘量多的數據再排序,同時盡力保留limit限制,這個很重要。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章