1.使用ensureIndex添加索引
ensureIndex函数帮助文档
db.blog.ensureIndex(keypattern[,options]) - options is an object with th
ese possible fields: name, unique, dropDups
name:指定索引名称
unique:是否唯一索引
dropDups:是否删除重复
创建索引的缺点:每次插入、更新、删除时都会产生额外的开销,要尽可能少创建索引。每个集合默认的最大索引个数为64个。
如果没有对应的键,索引会将其作为null存储,所以,如果对某个建立了唯一索引,但插入了多个缺少该索引键的文档,则由于文档包含null值而导致插入失败。
例子
> db.users.find()
{ "_id" : ObjectId("4fc6d0c9387a7fee4eb6bfa9"), "name" : "wilian", "age" : 23, "
sex" : "male" }
{ "_id" : ObjectId("4fc6d0e5387a7fee4eb6bfaa"), "name" : "rcsd", "age" : 25, "se
x" : "male" }
{ "_id" : ObjectId("4fc6d0f4387a7fee4eb6bfab"), "name" : "sds", "age" : 25, "sex
" : "male" }
{ "_id" : ObjectId("4fc6d100387a7fee4eb6bfac"), "name" : "qff", "age" : 25, "sex
" : "male" }
{ "_id" : ObjectId("4fc6d110387a7fee4eb6bfad"), "name" : "qff", "age" : 23, "sex
" : "male" }
{ "_id" : ObjectId("4fc6d11b387a7fee4eb6bfae"), "name" : "ssf", "age" : 23, "sex
" : "male" }
{ "_id" : ObjectId("4fc6d121387a7fee4eb6bfaf"), "name" : "qwwf", "age" : 23, "se
x" : "male" }
{ "_id" : ObjectId("4fc6d12b387a7fee4eb6bfb0"), "name" : "ttwf", "age" : 23, "se
x" : "male" }
> db.users.ensureIndex({"name":1,"age":-1},{"name":"userIndex"})
//1,-1代表索引方向
//查找索引
> db.system.indexes.find()
{ "name" : "_id_", "ns" : "blog.users", "key" : { "_id" : 1 }, "v" : 0 }
{ "_id" : ObjectId("4fc6d1d0387a7fee4eb6bfb1"), "ns" : "blog.users", "key" : { "
name" : 1, "age" : -1 }, "name" : "userIndex", "v" : 0 }
2.使用explain()监控索引使用情况
> db.users.find({"name":"qff","age":23}).explain()
{
"cursor" : "BtreeCursor userIndex",//没有使用索引时为BasicCursor,索引存储在B树结构中,所以使用查询时候会使用BtreeCursor类型的游标,userIndex为使用索引的名称
"nscanned" : 1,//查找了多少个文档
"nscannedObjects" : 1,
"n" : 1,//返回文档的数量
"millis" : 50,//数据库执行查询时间
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"name" : [
[
"qff",
"qff"
]
],
"age" : [
[
23,
23
]
]
}
}
3.使用hint强制使用某个索引
> db.users.find({"age":23,"name":/.*/}).hint({"name":1,"age":-1})
{ "_id" : ObjectId("4fc6d110387a7fee4eb6bfad"), "name" : "qff", "age" : 23, "sex
" : "male" }
{ "_id" : ObjectId("4fc6d121387a7fee4eb6bfaf"), "name" : "qwwf", "age" : 23, "se
x" : "male" }
{ "_id" : ObjectId("4fc6d11b387a7fee4eb6bfae"), "name" : "ssf", "age" : 23, "sex
" : "male" }
{ "_id" : ObjectId("4fc6d12b387a7fee4eb6bfb0"), "name" : "ttwf", "age" : 23, "se
x" : "male" }
{ "_id" : ObjectId("4fc6d0c9387a7fee4eb6bfa9"), "name" : "wilian", "age" : 23, "
sex" : "male" }
MongoDB的查询优化器非常智能,会替你选择该用哪个索引,多数情况下不需要指定的。
分享到:
相关推荐
- **索引键长度限制**:从 MongoDB 2.6 版本开始,如果索引字段值超出索引键长度限制,MongoDB 不会创建该索引。这防止了因过长的键值导致的资源浪费。 - **插入文档限制**:如果插入文档的索引字段值超过限制,...
在 MongoDB 中,索引管理是优化查询性能的关键环节。以下是对 MongoDB 索引管理的深入探讨: 1. **查看索引** MongoDB 提供了多种方法来查看已创建的索引。通过 `getIndexes()` 方法,你可以获取到指定集合上的...
MongoDB是一种流行的NoSQL数据库,它的索引机制与传统的关系型数据库类似,旨在提升查询和排序的速度。在MongoDB中,索引对于优化查询性能至关重要,尤其在处理大量数据时。下面将详细介绍MongoDB中不同类型的索引...
SpringBoot MongoDB 索引冲突分析及解决方法 SpringBoot MongoDB 索引冲突分析及解决方法是 SpringBoot 应用程序中 MongoDB 索引冲突的解决方法。该方法主要通过spring-data-mongo 实现基于 MongoDB 的 ORM-...
MongoDB索引是数据库性能优化的关键工具,它们类似于书籍的目录,可以帮助快速定位到所需的数据,从而大大提高查询效率。在没有索引的情况下,MongoDB必须遍历整个集合来找到匹配的文档,这在数据量大的时候会导致...
#### MongoDB索引 - **介绍**:索引能够显著提高查询性能,MongoDB支持单字段索引、复合索引、唯一索引等多种类型的索引。 - **后台创建索引**:可以在运行时创建索引,而无需停止服务。 - **索引类型**: - **单...
MongoDB 数据库索引介绍 MongoDB 数据库索引是提高查询性能和减少查询时间的重要手段。索引可以告诉 MongoDB 如何高效地检索数据,以便快速地找到所需的数据。在本文中,我们将深入探讨 MongoDB 数据库索引的基础...
MongoDB的索引是数据库性能优化的关键因素,与MySQL、Oracle等关系型数据库中的索引原理相似,但具有自身的特性和限制。MongoDB的索引建立在Collection(表)级别,采用B-树数据结构来加速查询和排序操作。 1. 默认...
本篇文章将详细探讨MongoDB中的索引管理以及高级索引概念。 1. **查看索引** MongoDB 提供了两种方法来查看集合上的索引。`db.COLLECTION_NAME.getIndexes()` 方法返回集合上所有索引的详细信息,而 `db.system....
索引是 MongoDB 中的关键概念,它们能够显著提升查询性能。本篇资料主要涵盖了 MongoDB 的索引使用和查询分析,以下是对这些知识点的详细解释: 1. **explain操作**:`explain` 是 MongoDB 提供的一个命令,用于...
在 MongoDB 中,索引的创建对于优化查询效率至关重要。以下是关于MongoDB创建索引的一些详细知识点: 1. **创建索引的方法**: MongoDB 使用 `ensureIndex()` 方法来创建索引。尽管在较新的版本中,`createIndex()...
索引是提升查询性能的关键工具,本文将详细介绍MongoDB中的索引基础知识、唯一索引、索引参数以及如何通过`explain`分析查询速度。 一、索引基础 在MongoDB中,索引是一种特殊的数据结构,它们对集合中的一列或多...
MongoDB是一个基于文档的NoSQL数据库,由C++语言编写,旨在为大量分布式数据提供高性能、高可用...6. **索引**:支持多种类型的索引,以优化查询性能。 7. **灵活的聚合框架**:MongoDB的聚合框架允许用户执行复杂的数
在MongoDB中,索引扮演着至关重要的角色,它类似于传统的关系型数据库,通过B-Tree数据结构加速数据查找和排序。 ### 一、索引简介 MongoDB 的索引可以通过`ensureIndex()`函数创建,指定一个或多个字段来提升查询...
MongoDB数据库
1. 普通索引 1. 单列索引 2. 多列索引 3. 子文档索引 2. 唯一索引 3. 稀疏索引 4. 哈希索引 5. 重建索引 6. 删除索引 7. 查看索引