`
m635674608
  • 浏览: 5043360 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

MongoDB学习笔记(索引)

 
阅读更多

一、索引基础:
    MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧。下面是创建索引的命令:
    > db.test.ensureIndex({"username":1})
    可以通过下面的名称查看索引是否已经成功建立:
    > db.test.getIndexes()
    删除索引的命令是:
    > db.test.dropIndex({"username":1})
    在MongoDB中,我们同样可以创建复合索引,如:
    -- 数字1表示username键的索引按升序存储,-1表示age键的索引按照降序方式存储。
    > db.test.ensureIndex({"username":1, "age":-1})
    该索引被创建后,基于username和age的查询将会用到该索引,或者是基于username的查询也会用到该索引,但是只是基于age的查询将不会用到该复合索引。因此可以说,如果想用到复合索引,必须在查询条件中包含复合索引中的前N个索引列。然而如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB可以智能的帮助我们调整该顺序,以便使复合索引可以为查询所用。如:
    > db.test.find({"age": 30, "username": "stephen"})
    对于上面示例中的查询条件,MongoDB在检索之前将会动态的调整查询条件文档的顺序,以使该查询可以用到刚刚创建的复合索引。
    我们可以为内嵌文档创建索引,其规则和普通文档没有任何差别,如:
    > db.test.ensureIndex({"comments.date":1})
    对于上面创建的索引,MongoDB都会根据索引的keyname和索引方向为新创建的索引自动分配一个索引名,下面的命令可以在创建索引时为其指定索引名,如:
    > db.test.ensureIndex({"username":1},{"name":"testindex"})    
    随着集合的增长,需要针对查询中大量的排序做索引。如果没有对索引的键调用sort,MongoDB需要将所有数据提取到内存并排序。因此在做无索引排序时,如果数据量过大以致无法在内存中进行排序,此时MongoDB将会报错。
    
二、唯一索引:
    在缺省情况下创建的索引均不是唯一索引。下面的示例将创建唯一索引,如:
    > db.test.ensureIndex({"userid":1},{"unique":true})
    如果再次插入userid重复的文档时,MongoDB将报错,以提示插入重复键,如:
    > db.test.insert({"userid":5})
    > db.test.insert({"userid":5})
    E11000 duplicate key error index: test.test.$userid_1  dup key: { : 5.0 }    
    如果插入的文档中不包含userid键,那么该文档中该键的值为null,如果多次插入类似的文档,MongoDB将会报出同样的错误,如:
    > db.test.insert({"userid1":5})
    > db.test.insert({"userid1":5})
    E11000 duplicate key error index: test.test.$userid_1  dup key: { : null }        
    如果在创建唯一索引时已经存在了重复项,我们可以通过下面的命令帮助我们在创建唯一索引时消除重复文档,仅保留发现的第一个文档,如:
    --先删除刚刚创建的唯一索引。
    > db.test.dropIndex({"userid":1}) 
    --插入测试数据,以保证集合中有重复键存在。
    > db.test.remove()
    > db.test.insert({"userid":5})
    > db.test.insert({"userid":5})    
    --创建唯一索引,并消除重复数据。
    > db.test.ensureIndex({"userid":1},{"unique":true,"dropDups":true})    
    --查询结果确认,重复的键确实在创建索引时已经被删除。
    > db.test.find()
    { "_id" : ObjectId("4fe823c180144abd15acd52e"), "userid" : 5 }    
    
    我们同样可以创建复合唯一索引,即保证复合键值唯一即可。如:
    > db.test.ensureIndex({"userid":1,"age":1},{"unique":true})    
    
三、使用explain:
    explain是非常有用的工具,会帮助你获得查询方面诸多有用的信息。只要对游标调用该方法,就可以得到查询细节。explain会返回一个文档,而不是游标本身。如:
    > db.test.find().explain()
    {
        "cursor" : "BasicCursor",
        "nscanned" : 1,
        "nscannedObjects" : 1,
        "n" : 1,
        "millis" : 0,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "isMultiKey" : false,
        "indexOnly" : false,
        "indexBounds" : {

        }    
    }
    explain会返回查询使用的索引情况,耗时和扫描文档数的统计信息。
    "cursor":"BasicCursor"表示没有使用索引。
    "nscanned":1 表示查询了多少个文档。
    "n":1 表示返回的文档数量。
    "millis":0 表示整个查询的耗时。
    
四、索引管理:
    system.indexes集合中包含了每个索引的详细信息,因此可以通过下面的命令查询已经存在的索引,如:
    > db.system.indexes.find()
    如果在为已有数据的文档创建索引时,可以执行下面的命令,以使MongoDB在后台创建索引,这样的创建时就不会阻塞其他操作。但是相比而言,以阻塞方式创建索引,会使整个创建过程效率更高,但是在创建时MongoDB将无法接收其他的操作。
    > db.test.ensureIndex({"username":1},{"background":true})

 

http://www.cnblogs.com/stephen-liu74/archive/2012/08/01/2561557.html

分享到:
评论

相关推荐

    mongodb学习笔记资料

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

    MongoDB学习笔记

    自己在学习MongoDB的一些笔记,里面有各个查询选择器的使用截图,还有一些索引的介绍。

    MongoDB学习笔记(六) MongoDB索引用法和效率分析

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

    Mongodb学习笔记.docx

    MongoDB 学习笔记 本文档是 MongoDB 学习笔记,涵盖了 NoSQL、Cache、运行平台等多个方面的知识点。 一、NoSQL 数据库 MongoDB MongoDB 是一个强大、灵活、可扩展性好的文档数据存储器,可以完成大部分关系数据库...

    MongoDB学习笔记思维导图.pdf

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

    mongodb学习笔记和mongodb权威指南

    首先,`mongodb_and_python`学习笔记可能涵盖了如何使用Python编程语言与MongoDB进行交互。Python是常见的MongoDB驱动程序之一,通过PyMongo库,开发者可以方便地执行CRUD(创建、读取、更新、删除)操作,构建复杂...

    MongoDB_学习笔记

    ### MongoDB 学习笔记知识点详解 #### 一、MongoDB 命令行基础操作 **1.1 帮助命令** - **help**:显示 MongoDB shell 的基本帮助信息。 - **db.help()**:提供当前数据库的帮助信息。 - **db.mycoll.help()**:...

    MongoDB学习总结笔记

    以下是对MongoDB学习的一些关键知识点的详细解释: 1. **MongoDB的基本概念**:MongoDB以集合(Collections)的形式存储数据,集合相当于关系型数据库中的表。集合内包含文档(Documents),文档是JSON格式的数据...

    mongodb学习笔记

    ### MongoDB 学习笔记知识点详解 #### MongoDB 介绍 ##### 简介 MongoDB 是一种基于分布式文件存储的数据库,使用 C++ 编写。它主要为 Web 应用程序提供可扩展、高性能的数据存储解决方案。MongoDB 的数据结构非常...

    MongoDB数据库学习笔记

    在学习MongoDB时,有几个关键的概念需要理解: 1. **数据库概念**:数据库是存储和管理数据的系统,根据需求提供数据查询。MongoDB是一种NoSQL数据库,不遵循传统的关系型数据库模式,因此没有固定的表结构。 2. *...

    MongoDB入门教程

    最后,MongoDB学习笔记(六)专注于MongoDB的索引和效率分析。索引是提升查询性能的关键,这部分会详细介绍如何创建、管理和使用索引,以及如何根据工作负载优化索引策略,以达到最佳查询效率。 总的来说,这个...

    MongoDB学习笔记—Linux下搭建MongoDB环境

    MongoDB是一种开源数据库系统,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。...在学习过程中,不断实践和理解MongoDB的特性和操作方法,将有助于你更好地利用这个强大的数据库系统。

    MongoDB学习笔记(五) MongoDB文件存取操作

    - 考虑文件的访问模式,优化索引以提高查询性能。 - 监控存储和内存使用,以避免资源耗尽。 - 使用适当的权限和认证机制保护数据安全。 总之,MongoDB提供了灵活的文件存取方式,能够适应各种应用场景。无论是简单...

    mongoDB自学笔记

    学习MongoDB,不仅需要掌握其基本的数据操作、索引管理和查询优化,还需要理解其底层的数据存储模型和执行机制。以上的知识点涵盖了很多基础且重要的操作和概念,为使用MongoDB提供了坚实的基础。通过实际操作和反复...

    MongoDB学习笔记之分组(group)使用示例

    最后,如果您对MongoDB有更多的兴趣,可以参考相关学习笔记,包括MongoDB的配置、索引使用、文件存取、环境搭建以及各种操作方法,这些都会帮助您更好地掌握MongoDB的使用技巧。无论是在Windows还是Linux环境下,从...

    MongoDB学习笔记(一) MongoDB介绍与安装方法

    MongoDB 的特点是高性能、易部署、易使用,支持面向集合的存储、动态查询、完全索引、复制和故障恢复等功能。它还提供多种语言的驱动程序,如 Python、PHP、Ruby、Java、C、C#、JavaScript、Perl 和 C++。 MongoDB ...

Global site tag (gtag.js) - Google Analytics