2015-11-24 31 views
0

我有一個mongo 2.6數據庫中的MP3的小集合。從這個「歌」收集的文件可能是這樣的:如何驗證mongo索引是否正常工作?

{_id: ..., name: "shagCarpet.mp3", tags: ["acapella", "rap"]}

我希望這個集合在不久的將來快速增長,所以我想這個指標收集輕鬆搜索。我創建了一個多鍵索引的「標籤」字段中,像這樣:

db.songs.createIndex({"tags": 1})

因爲收藏是目前小,我不加入索引看到性能增益。我如何驗證索引是否正常工作?我可以查看索引中的數據嗎?我知道db.songs.getIndexes(),但只有當我創建索引時告訴Mongo才反思。我真的想看看索引數據是什麼樣的。

+0

不完全確定你在找什麼,但重要的是運行['explain()'](https://docs.mongodb.org/manual/reference/method/cursor.explain/)您的查詢並確認索引在您期望的情況下正在使用。順便說一句,這是一個_multi-key_索引,而不是一個複合索引。 – JohnnyHK

+0

如果您希望收集快速增長,您需要記住索引會減慢寫入速度並加快讀取速度。在創建索引之前等待,直到您在那裏獲得更多信息,這可能是一個好主意。 –

回答

1

,您將使用explain()獲得更多信息:

db.songs.find({"tags":"accapella"}).explain();

。不過我想你想比較正在使用該指標與正常採集掃描速度的查詢速度(沒有索引)。您可以使用hint()方法即強制查詢來執行集合掃描。在_id上。

db.songs.find({"tags":"accapella"}).hint({_id:1}).explain();

然後比較解釋兩者之間的() 「米利斯」 屬性 - 你應該看到,如果沒有提示的查詢({_ ID:1})更快。

1

確定您的索引是否正常工作的第一步是確定如何您將要如何搜索數據庫。一旦找到最常運行和/或最昂貴的查詢,請在shell中運行它們並追加.explain()調用。例如:

db.songs.find(...).explain(); 

這將轉儲大量的信息出來,其中一部分會告訴你,如果使用了索引,如果是哪些以及以什麼順序。有關詳情,請參閱here