在MongoDB中使用了一個聯合索引,發現了一些問題,記錄一下,友善以後查閱!
首先來看表的說明:
<a href="http://s3.51cto.com/wyfs02/M01/12/38/wKiom1L95zyxvvZaAAOGvQeki6I411.jpg" target="_blank"></a>
注意高亮出的索引:
prop.lis_sta_1_prop.is_recom_-1_prop.re_t_-1_prop.post_t_-1,這4個字段分别是
文章狀态、推薦狀态,推薦時間,發貼時間
測試了一下,有以下結果
可以使用上面索引的查詢:
1
2
3
<code>db.post.find({</code><code>'prop.lis_sta'</code><code>{$</code><code>in</code><code>[5]}}).sort({</code><code>'prop.is_recom'</code><code>:-1,</code><code>'prop.re_t'</code><code>:-1,</code><code>'prop.post_t'</code><code>:-1}).explain();</code>
<code>db.post.find({</code><code>'prop.lis_sta'</code><code>:5}).sort({</code><code>'prop.is_recom'</code><code>:-1,</code><code>'prop.re_t'</code><code>:-1,</code><code>'prop.post_t'</code><code>:-1}).explain();</code>
<code>db.post.find({</code><code>'prop.lis_sta'</code><code>{$</code><code>in</code><code>[0,5]}}).sort({</code><code>'prop.is_recom'</code><code>:-1,</code><code>'prop.re_t'</code><code>:-1,</code><code>'prop.post_t'</code><code>:-1}).limit(20).explain();</code>
不可以使用上面索引的查詢:
<code>db.post.find({</code><code>'prop.lis_sta'</code><code>{$</code><code>in</code><code>[0,5]}}).sort({</code><code>'prop.is_recom'</code><code>:-1,</code><code>'prop.re_t'</code><code>:-1,</code><code>'prop.post_t'</code><code>:-1}).explain();</code>
<a href="http://s3.51cto.com/wyfs02/M01/12/38/wKioL1L96OyhbV_pAAElaIR42Xg779.jpg" target="_blank"></a>
是以在這裡說明幾點:
1)、盡量避免以靈活的參數的形式傳遞排序規則,如果資料比較多的話,卻沒有建立相關索引,容易産生問題。
2)、修改了排序規則,要檢查索引,通過explain來測試一下。
3)、使用已有索引過濾掉盡量多的資料再排序,同時盡力保留limit限制,這個很重要。
本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1359293,如需轉載請自行聯系原作者