`
dacoolbaby
  • 浏览: 1265913 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MongoDB索引学习

阅读更多

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学习笔记(六) MongoDB索引用法和效率分析

    MongoDB是一种流行的NoSQL数据库,它的索引机制与传统的关系型数据库类似,旨在提升查询和排序的速度。在MongoDB中,索引对于优化查询性能至关重要,尤其在处理大量数据时。下面将详细介绍MongoDB中不同类型的索引...

    收集的mongodb开发学习资料

    6. **索引**:索引是提高查询性能的关键,MongoDB提供了多种类型的索引,如单字段索引、复合索引、地理空间索引等,以及如何创建、查看和删除索引的方法。 7. **复制集**:复制集是MongoDB的高可用性和容错性机制,...

    MongoDB 学习资料集锦

    "MongoDB 学习资料集锦" 包含了深入学习 MongoDB 的关键资源,如 "mongodb权威指南" 和 "官方的详细手册"。这些资料将帮助初学者和经验丰富的开发人员掌握 MongoDB 的核心概念、操作以及最佳实践。 首先,"mongodb...

    五、MongoDB 学习PPT

    MongoDB 是一种流行的开源NoSQL数据库,以其面向文档的数据模型、高性能、高可用性和高可扩展性而闻名。它的设计目标是提供一个灵活且可扩展的解决方案,特别适合处理大量结构化和半结构化的数据。 在MongoDB中,...

    mongodb学习笔记资料

    mongodb学习笔记资料,从安装到操作库collection 对document的crud 索引 replicaSet sharding 备份与恢复

    MongoDB学习文档.zip

    本压缩包“MongoDB学习文档.zip”包含了一个名为“MongoDB学习文档.docx”的文件,该文件很可能是对MongoDB的基础知识、安装配置、操作指南以及Java API使用的详细介绍。 MongoDB的核心特性包括其灵活性、高可用性...

    Mongodb 学习 PPT上课教程

    2. 高性能: MongoDB 提供了高性能的数据存储和查询解决方案,通过索引支持和存储引擎优化。 3. 可扩展性: MongoDB 提供了可扩展性的数据库解决方案,通过分片集群架构实现水平扩展。 4. 灵活的数据模型: MongoDB ...

    mongodb学习手册.pdf

    ### MongoDB学习手册精要知识点概览 #### 一、MongoDB简介 MongoDB,源于英文单词“humongous”,意指其设计初衷在于处理海量数据。作为一款开源、面向文档的NoSQL数据库,MongoDB凭借其灵活性和高性能,迅速成为...

    MongoDB学习笔记

    学习MongoDB不仅需要理解其基本的数据操作和管理,还需要了解其高级特性、集群部署、索引机制、日志系统、数据备份与恢复等方面的知识。接下来将基于提供的文件内容详细展开介绍MongoDB的相关知识点。 一、入门 1. ...

    很全的_Mongodb数据库学习文档_与_php操作mongodb

    MongoDB支持单字段索引、复合索引、文本索引等多种类型,可通过`createIndex()`方法创建。 #### 结论 深入理解MongoDB的安装、启动流程以及掌握如何使用PHP进行数据库操作,对于现代Web开发至关重要。无论是处理大...

    mongodb入门学习资料

    本学习资料将引导你逐步掌握MongoDB的基本概念、操作和优化技巧。 一、MongoDB基础知识 MongoDB是一种文档型数据库,采用键值对(BSON格式)存储数据,这种数据模型灵活,适合半结构化和非结构化数据的存储。...

    MongoDB的学习--索引类型和属性

    MongDB的索引分为以下几种类型:单键索引、复合索引、多键索引、地理空间索引、全文本索引和哈希索引在一个键上创建的索引就是单键索引,单键索引是最常见的索引,如MongoDB默认创建的_id的索引就是单键索引。...

    MongoDB学习笔记思维导图.pdf

    MongoDB是目前流行的NoSQL数据库之一,它以高性能、高可用性和易于扩展的特性受到开发者的青睐。...通过本篇学习笔记,读者应当能够掌握MongoDB的基本操作、高级查询、索引管理以及安全性控制等核心知识点。

    mongodb学习手册

    5. **索引**:MongoDB 可创建单字段或多字段索引,甚至可以创建地理空间索引,提升查询性能。 6. **高性能**:MongoDB 使用内存映射技术,将数据文件映射到内存,加快读写速度。此外,其支持TokuMX引擎,提供事务...

    mongodb 学习文档

    这份"mongodb 学习文档"涵盖了多个方面的内容,包括MongoDB的基础概念、安装配置、数据模型、查询操作、聚合框架、索引管理、复制集、分片集群等关键知识点。下面将对这些主题进行详细阐述。 一、基础概念 MongoDB...

    MongoDB学习视频.zip

    MongoDB是一种流行的...此外,你还会接触到复制集、分片、索引、聚合框架等进阶主题,这些都对理解MongoDB如何支持大规模数据存储和处理至关重要。通过深入学习和实践,你可以成为一名熟练的MongoDB开发者或管理员。

    NoSQL数据库MongoDB基础学习

    "NoSQL数据库MongoDB基础学习" MongoDB 是一种基于分布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非...

    MongoDB入门学习

    - **索引管理**:MongoDB支持多种类型的索引,包括单字段索引、复合索引、唯一索引等,通过创建索引来提高查询效率。 - **聚合框架**:MongoDB提供了一个强大的聚合框架,允许用户处理大量的数据,并返回计算后的...

Global site tag (gtag.js) - Google Analytics