MongoDB支持複合索引,所謂複合索引就是一個索引包含多個字段,例如爲如下collection建立一個複合索引:
collection {
user_id:
score:
……
}
db.col.createIndex({‘user_id’ : 1, ‘score’ : -1})
有數據庫基礎的同學對這個也沒有什麼疑惑,而且應該知道1表示升序,-1表示降序。
- 在MongoDB的複合索引中不允許有hash索引
- 複合索引最多包含31個字段
其實複合索引的創建和使用並沒有太多新鮮的內容,和單字段索引差不多,但是值得一講的是複合索引的前綴匹配,這個應該在任何支持複合索引的數據庫中都存在,這裏就是以MongoDB爲例。
假如有這樣一個複合索引:
{'item' : 1, 'loc' : 1, 'stock' : 1}
那麼上述索引有以下兩個索引前綴:
1. {'item' : 1}
2. {'item' : 1, 'loc' : 1}
任何查詢可以利用複合索引或複合索引的前綴索引加速查找。也就是說,上述一個複合索引可以支持以下三種索引:
{'item' : 1}
{'item' : 1, 'loc' : 1}
{'item' : 1, 'loc' : 1, 'stock' : 1}
但是需要以下字段的索引上述複合索引是無能爲力的,只能另建索引:
{'loc' : 1}
{'stock' : 1}
{'loc' : 1, 'stock' : 1}
所以,一直提倡建立複合索引,因爲複合索引能夠帶來額外的好處,根據業務查詢,建立合適的複合索引,真是美滋滋。