您好,登錄后才能下訂單哦!
在MongoDB中使用了一個聯合索引,發現了一些問題,記錄一下,方便以后查閱!
首先來看表的說明:
注意高亮出的索引:
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();
所以在這里說明幾點:
1)、盡量避免以靈活的參數的形式傳遞排序規則,如果數據比較多的話,卻沒有建立相關索引,容易產生問題。
2)、修改了排序規則,要檢查索引,通過explain來測試一下。
3)、使用已有索引過濾掉盡量多的數據再排序,同時盡力保留limit限制,這個很重要。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。