假设我有一个mongodb收藏品书。
[{book_id: 124, book_name: 'ABCD', language: 'English'}, {book_id: 185, book_name: 'EFGH', language: 'French'}, ...]
book_id 是唯一的。因此,要检索特定书籍,仅 book_id 就足够了。 查询可能是
db.books.find({book_id: 124})
假设我也知道这本书是一本“英语”书。我可以向
进行查询db.books.find({book_id:124, language: 'English'})
是否将更多不必要的字段添加到查询中使查询更快或更慢?
答案 0 :(得分:1)
直接的答案是添加更多字段肯定会减慢查询速度。
但是在您提到的情况下,book_id是唯一的,并且您知道这本书是一本英语书,因此查询没有任何区别。
在这里重要的是book_id是否已编入索引?
MongoDB索引以线性方式工作: 假设book_id既没有索引也没有唯一。在这种情况下,集合扫描将返回假设100个文档包含book_id:124的信息,然后从100个文档中查找包含英语的语言的字段数。
但是,如果book_id已建立索引,则查询将使用索引扫描并直接返回100 doc,并查找英语语言。
在这种情况下,如果book_id和语言都属于复合索引,则查询仅返回该特定文档。