2015-01-26 76 views
1

使用MongoDB Native 2.0+的Im。 我有一個名爲services的集合。此集合包含在另一個集合中引用clients的文檔。這意味着,每項服務都由一個客戶「擁有」。何時創建索引,何時不創建

會有大約50-200個客戶。 每個客戶在理論上可以「擁有」1-50個服務,但實際上大多數客戶可能會在1-10個左右。

每個服務都有兩個字段作爲唯一標識符。一個是_id,它用於管理員URL和作爲文檔之間的不可變引用。另一個是slug,這是一個更簡單的標識符,主要用於公共URL以提高可讀性。

我主要有兩種類型的查詢對這個集合:

db.services.find({client: clientID, _id: id}).toArray(callback) 
db.services.find({client: clientID, slug: slug}).toArray(callback) 

認爲,我要創建以下複合索引優化查詢:

db.services.ensureIndex({client: 1, _id: 1}) 
db.services.ensureIndex({client: 1, slug: 1}) 

但考慮到每個客戶「擁有」的服務可能很少(?)數量。也許只用一個索引就足夠了。要麼...

db.services.ensureIndex({client: 1}) 

或僅這一個複合索引

db.services.find({client: clientID, slug: slug}).toArray(callback) 

...因爲slug查詢可能會被用到了很多比`_id更多。

你會創建什麼樣的索引?

謝謝你對此的所有提示!

回答

1

在我看來,無論是_idslug將要在服務收集獨一無二的,所以我不明白的client值的搜索是怎麼回事了僅僅有上_id簡單的索引來提高性能和slug個別。

當然_id將有一個開箱即用的索引,所以我認爲你只需要創建{slug: 1}索引。