1.在使用索引之前
在MongoDB中所有的insert,update,delete操作过程中,
都会更新所有与collection相关的索引。
每个索引都会为单个写操作进行开销。
所以,必须确定一下,为了索引,写入的开销是值得的,也做好当前的索引确实被使用到。
和数据库一样,Mongodb每次查询只会选择一条索引进行检索。
如果查询条件出现$or,那么有可能会检索不同的索引
为了确保执行效率,保证你的索引能够全部放在内存里面。
2.单列索引
在MongoDB中,所有的collection都会默认存在一个索引_id,它是唯一切递增的,你不能删除它。
用户可以根据自己的需要添加更多的索引。
如下就是给name字段增加一个索引
db.friends.ensureIndex( { "name" : 1 } )
如果要给内嵌的文档对象添加索引,如下:
//数据对象 {"_id": ObjectId(...) "name": "John Doe" "address": { "street": "Main", "zipcode": "53511", "state": "WI" } } //内嵌document属相索引创建 db.people.ensureIndex( { "address.zipcode": 1 } ) //对整个内嵌的document上创建索引 db.people.ensureIndex( { "address": 1 } )
3.组合索引
当查询存在多个条件的时候,可以通过组合索引(compound index)来加速查询。
注意:你不可以在已经建立了hash索引的字段上面,构建组合索引,这样你会得到一个异常!
//数据结构 { "_id": ObjectId(...), "item": "Banana", "category": ["food", "produce", "grocery"], "location": "4th Street Store", "stock": 4, "type": "cases", "arrival": Date(...) } //创建组合索引 db.products.ensureIndex( { "item": 1, "stock": 1 } ) //组合索引有排序的,你可以通过配置升序或者降序来控制索引的存储 db.events.find().sort( { username: 1, date: -1 } )
对于组合索引,和数据库索引一样,是存在字段顺序的区别的。
当你创建了item 和stock 索引的时候,你查询item 也会用到该索引。但是,单独查询stock的时候,索引则失效。
4.Multikey Indexes多键值索引
当一个字段包含数组,Mongodb会把数组里面的每个值都加入到索引里面。
这种索引可以实现使用数组作为查询条件并返回结果。
Mongodb在创建索引的时候会自行进行判断,是否使用多键值索引。
限制:当你使用混合索引的时候,最多只能允许一个字段是数组字段。
5.地理索引
略
6.全文索引 Text Index
Mongodb提供全文索引,以支持检索collection中document里的字符串内容。
Text index可以支持string对象和string的数组array。
在使用全文索引的时候,需要使用 $text 查询符。
创建全文索引:
//创建一个简单的全文索引 db.reviews.ensureIndex( { comments: "text" } ) //给指定的字段创建全文索引 db.collection.ensureIndex( { subject: "text", content: "text" } ) //为所有字段创建全文索引 //这表示为所有的string字段创建全文索引,并将这个索引命名为TextIndex db.collection.ensureIndex( { "$**": "text" }, { name: "TextIndex" } )
PS. 一个collection只能最多含有一个全文索引。
全文索引默认支持的语言:
http://docs.mongodb.org/manual/reference/text-search-languages/#text-search-languages
使用全文索引来查询数据:
//简单查询 db.articles.find( { $text: { $search: "coffee" } } ) //匹配任何一个单词 db.articles.find( { $text: { $search: "bake coffee cake" } } ) //匹配任何一个词组 phrases db.articles.find( { $text: { $search: "\"coffee cake\"" } } ) //排除一个 db.articles.find( { $text: { $search: "bake coffee -cake" } } )
详细:http://docs.mongodb.org/manual/reference/operator/query/text/#op._S_text
7.Hashed Index 哈希索引
哈希索引会维护一个条目,里面存放着被hash的字段。
与多键值索引不同,hash索引会将整个sub-document作为一个整体进行hash。
哈希索引可以用于等值查询,但是不适用于范围查询。
创建哈希索引:
db.active.ensureIndex( { a: "hashed" } )
8.索引属性
8.1 TTL索引
其实是对应TTL collection(Time to live)表,是Mongodb 2.2加入的一种临时表。
8.2Unique Index唯一索引
与数据库的索引一样,强制唯一的索引。
创建方式如下:
db.members.ensureIndex( { "user_id": 1 }, { unique: true } )
如果在组合索引上面使用唯一键。
那么Mongodb会强制组合出来的键值唯一。
唯一索引不适用于hash索引。
8.3稀疏索引/ 散列索引
Sparse Index会将有值的数据进行索引。
不同于普通的索引,会将collection所有的值进行索引,包括null值。
创建方式:
db.addresses.ensureIndex( { "xmpp_id": 1 }, { sparse: true } )
在创建稀疏索引的时候,可以同时使用唯一索引属性。
db.scores.ensureIndex( { score: 1 } , { sparse: true, unique: true } )
内容来源:
http://docs.mongodb.org/manual/
相关推荐
MongoDB是一种流行的NoSQL数据库,它的索引机制与传统的关系型数据库类似,旨在提升查询和排序的速度。在MongoDB中,索引对于优化查询性能至关重要,尤其在处理大量数据时。下面将详细介绍MongoDB中不同类型的索引...
6. **索引**:索引是提高查询性能的关键,MongoDB提供了多种类型的索引,如单字段索引、复合索引、地理空间索引等,以及如何创建、查看和删除索引的方法。 7. **复制集**:复制集是MongoDB的高可用性和容错性机制,...
"MongoDB 学习资料集锦" 包含了深入学习 MongoDB 的关键资源,如 "mongodb权威指南" 和 "官方的详细手册"。这些资料将帮助初学者和经验丰富的开发人员掌握 MongoDB 的核心概念、操作以及最佳实践。 首先,"mongodb...
MongoDB 是一种流行的开源NoSQL数据库,以其面向文档的数据模型、高性能、高可用性和高可扩展性而闻名。它的设计目标是提供一个灵活且可扩展的解决方案,特别适合处理大量结构化和半结构化的数据。 在MongoDB中,...
mongodb学习笔记资料,从安装到操作库collection 对document的crud 索引 replicaSet sharding 备份与恢复
本压缩包“MongoDB学习文档.zip”包含了一个名为“MongoDB学习文档.docx”的文件,该文件很可能是对MongoDB的基础知识、安装配置、操作指南以及Java API使用的详细介绍。 MongoDB的核心特性包括其灵活性、高可用性...
2. 高性能: MongoDB 提供了高性能的数据存储和查询解决方案,通过索引支持和存储引擎优化。 3. 可扩展性: MongoDB 提供了可扩展性的数据库解决方案,通过分片集群架构实现水平扩展。 4. 灵活的数据模型: MongoDB ...
### MongoDB学习手册精要知识点概览 #### 一、MongoDB简介 MongoDB,源于英文单词“humongous”,意指其设计初衷在于处理海量数据。作为一款开源、面向文档的NoSQL数据库,MongoDB凭借其灵活性和高性能,迅速成为...
学习MongoDB不仅需要理解其基本的数据操作和管理,还需要了解其高级特性、集群部署、索引机制、日志系统、数据备份与恢复等方面的知识。接下来将基于提供的文件内容详细展开介绍MongoDB的相关知识点。 一、入门 1. ...
MongoDB支持单字段索引、复合索引、文本索引等多种类型,可通过`createIndex()`方法创建。 #### 结论 深入理解MongoDB的安装、启动流程以及掌握如何使用PHP进行数据库操作,对于现代Web开发至关重要。无论是处理大...
本学习资料将引导你逐步掌握MongoDB的基本概念、操作和优化技巧。 一、MongoDB基础知识 MongoDB是一种文档型数据库,采用键值对(BSON格式)存储数据,这种数据模型灵活,适合半结构化和非结构化数据的存储。...
MongDB的索引分为以下几种类型:单键索引、复合索引、多键索引、地理空间索引、全文本索引和哈希索引在一个键上创建的索引就是单键索引,单键索引是最常见的索引,如MongoDB默认创建的_id的索引就是单键索引。...
MongoDB是目前流行的NoSQL数据库之一,它以高性能、高可用性和易于扩展的特性受到开发者的青睐。...通过本篇学习笔记,读者应当能够掌握MongoDB的基本操作、高级查询、索引管理以及安全性控制等核心知识点。
5. **索引**:MongoDB 可创建单字段或多字段索引,甚至可以创建地理空间索引,提升查询性能。 6. **高性能**:MongoDB 使用内存映射技术,将数据文件映射到内存,加快读写速度。此外,其支持TokuMX引擎,提供事务...
这份"mongodb 学习文档"涵盖了多个方面的内容,包括MongoDB的基础概念、安装配置、数据模型、查询操作、聚合框架、索引管理、复制集、分片集群等关键知识点。下面将对这些主题进行详细阐述。 一、基础概念 MongoDB...
MongoDB是一种流行的...此外,你还会接触到复制集、分片、索引、聚合框架等进阶主题,这些都对理解MongoDB如何支持大规模数据存储和处理至关重要。通过深入学习和实践,你可以成为一名熟练的MongoDB开发者或管理员。
"NoSQL数据库MongoDB基础学习" MongoDB 是一种基于分布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非...
- **索引管理**:MongoDB支持多种类型的索引,包括单字段索引、复合索引、唯一索引等,通过创建索引来提高查询效率。 - **聚合框架**:MongoDB提供了一个强大的聚合框架,允许用户处理大量的数据,并返回计算后的...