- 浏览: 496911 次
- 性别:
- 来自: 大连->北京
文章分类
最新评论
-
春天好:
写的很不错 推荐一个免费好用的云端爬虫开发平台不需要安装环境, ...
web爬虫 -
cpu88:
网络爬虫爬来爬去,网上信息可以瞬间扩散,但是也意味着,没有人愿 ...
web爬虫 -
biaoming:
牛。。学习了。。
MongoDB 关于索引的建议 -
biaoming:
楼主用mongo好早啊。
MongoDB 优化 -
biaoming:
好教程,学习了。。。
MongoDB 优化
索引Indexes
索引常常用来大幅度的提升查询的性能。 考虑应用程序的查询种类是非常重要的事情,因此你就要定义相关的索引。
决定了之后,在MongoDB中创建索引是非常简单的。
基础索引就是collection中一个document指定一个字段值的数据结构。MongoDB查询优化器可以使用这个数据结构快速分类整理以及排序document。一般来说,索引的实现是B-TREE。
在Shell中,你可以使用ensureIndex()来创建索引,并且指定要索引一个或多个字段。
我们在j字段上创建一个索引
db.things.ensureIndex({j:1}); 如果索引不存在,ensureIndex就创建索引。 一旦索引被创建了,匹配索引字段的查询是非常快速的。 没有索引的话,MongoDB必须检查每个document要查询的字段。 db.things.find({j : 2}); // 快速,使用了索引。
db.things.find({x : 3}); // 慢- 检查所有的document,因为x没有被索引。
你可以使用db.things.getIndexes();来查看索引信息。
默认索引_id字段默认被添加了索引。这个索引也不能被删除。_id索引是唯一的。Capped Collections并不会默认创建索引。
Embedded Keys你甚至可以向embedded document的字段创建索引。例子
db.things.ensureIndex({"address.city": 1})
document做为key索引的字段可以为任意类型,包括了document类型。 db.factories.insert( { name: "xyz", metro: { city: "New York", state: "NY" } } ); db.factories.ensureIndex( { metro : 1 } ); //这个查询可以使用上面创建的索引。
db.factories.find( { metro: { city: "New York", state: "NY" } } ); //等同于
db.factories.find( { metro: { $gte : { city: "New York" } } } );
//metro内的字段顺序错误,不能应用这个索引。
db.factories.find( { metro: { state: "NY" , city: "New York" } } ); 也可以创建这个document内字段的组合索引。 db.factories.ensureIndex( { "metro.city" : 1, "metro.state" : 1 } ); //以下查询可以使用上面创建的索引。
db.factories.find( { "metro.city" : "New York", "metro.state" : "NY" } ); db.factories.find( { "metro.city" : "New York" } ); db.factories.find().sort( { "metro.city" : 1, "metro.state" : 1 } ); db.factories.find().sort( { "metro.city" : 1 } )
下面谈谈这两种方法的优劣势。 当使用整个document做为索引,顺序就默认定义了,升序。 当使用组合索引,你可以混合升序和降序的key,并且查询优化器使用该索引也需要匹配查询中的首个字段。
数组当索引的键为数组的时候,MongoDB会索引数组中每个元素。 组合索引除了支持单个字段的索引,MongoDB也支持索引多个字段。创建的索引地方法一样,都使用ensureIndex()。但是你可以指定多个字段。 db.things.ensureIndex({j:1, name:-1}); 当创建索引的时候,上面的数字1和-1代表着索引的方向。1是升序,-1为降序。如果为单个索引,顺序并无所谓。如果使用组合索引,顺序就非常重要了。
你可以在多个字段创建索引,查询可以用字段子集做为开头来匹配索引。
如果你在a,b,c上创建索引。 下列查询都可以使用这个索引。 a a,b a,b,c
Sparse Indexes稀疏索引
1.7.4的新功能。 sparse index就是在一个存在于document的字段上创建的索引。
任何document中不存在这个索引的字段,那么就不会保存在索引中。之所以叫sparse,当没有索引字段的值的时候,document也就丢失了。 Sparse indexes, 不是完整的索引,也和完整索引操作上有所不同。当使用一个sparse index排序,一些document就不会返回了。
只有存在于index中的document才会返回。
db.people.ensureIndex({title : 1}, {sparse : true})
db.people.save({name:"Jim"})
db.people.save({name:"Sarah", title:"Princess"}) db.people.find({title:{$ne:null}}).sort({title:1})
// 只返回 Sarah的文档
你可以把sparse何unique索引结合起来,来给那些没有丢失字段的document加以唯一性约束。
Unique Indexes唯一索引MongoDB支持唯一索引,保证了插入document的索引值和已存在document索引值不重复。
下面的示例就保证了不会有两个document中的firstname和lastname值相等。
db.things.ensureIndex({firstname: 1, lastname: 1}, {unique: true});
丢失的键
当保存一个不存在唯一索引的字段的document,那么这个字段的值默认为null。但是这种缺失索引字段的document只能插入一次了。
db.things.ensureIndex({firstname: 1}, {unique: true});
db.things.save({lastname: "Smith"});
/这个操作就会发生错误。
db.things.save({lastname: "Jones"});
重复的值一个唯一索引的值是不能重复的。
保存首个document,而要删除其他索引值和它重复的document,添加参数dropDups
db.things.ensureIndex({firstname : 1}, {unique : true, dropDups : true})
在后台创建索引创建一个索引,默认的情况会阻塞其他数据库的操作。在1.3.2+版本,支持后台创建索引background index build option .
删除索引删除指定collection的索引语句为 db.collection.dropIndexes(); 删除一个单独的索引 db.collection.dropIndex({x: 1, y: -1}) 直接运行一个命令 // 注意:1.3.2之前 命令是"deleteIndexes", 而不是 "dropIndexes"
// 从foo collection中删除 {y:1}索引
db.runCommand({dropIndexes:'foo', index : {y:1}}) // 删除所有索引
db.runCommand({dropIndexes:'foo', index : '*'}) 重新索引reIndex会重新创建索引 db.myCollection.reIndex() // 等同于:
db.runCommand( { reIndex : 'myCollection' } ) 一般来说用不上。如果collection大小增长太快或者索引占用空间看起来很大,就可以使用reIndex。 修复数据库会重新创建索引。 额外要注意的
索引的性能索引主要用于查询,也包括了排序,非常的快。通过索引查找的document更新也是非常快的。
然而,要记住的是,索引会降低插入和删除的性能。原因就是数据的写入也要同时也如索引。
但是索引对于那些读取多于写入的collection尤为有用。
对于写入数据频率高的collection,索引会影响性能。
大部分collection都是读取率高,所以索引对于大部分场景还是非常不错的。
不适用索引来进行排序如果排序的数据非常少(小于4M),那就不需要索引。一般要limit和sort一起使用。Geospatial地理空间 |
发表评论
-
MongoDB 优化
2011-04-12 15:44 10179优化一个简单的例子 这部分主要讲解如何优化M ... -
MongoDB Schema Design 数据库设计
2011-04-11 19:26 13148介绍 使用MongoDB设计数据库,就不要 ... -
MongoDB 合法的键的名称Legal Key Names
2011-04-11 17:05 1813合法的键的名称Legal Key Names ... -
MongoDB Inserting 插入数据
2011-04-11 16:51 4736MongoDB Inserting 插入数据 ... -
MongoDB 关于索引的建议
2011-04-11 15:20 10219MongoDB 关于索引的建议 ... -
MongoDB Multikeys(多个键)
2011-04-11 11:57 3543Multikeys(多个键) Mong ... -
MongoDB 后台中操作索引
2011-04-11 11:24 2460MongoDB 后台中操作索引 ... -
使用 Multikeys 模拟大数量的索引
2011-04-11 10:26 1488使用 Multikeys 模拟大数量的索引 ... -
使用MongoDB GridFS的场景
2011-04-09 14:19 2672使用MongoDB GridFS的场景 ... -
MongoDB GridFS
2011-04-07 14:34 2367GridFS GridFS是Mong ... -
MongoDB 使用大数据量的collection
2011-04-07 13:07 4704使用大数据量的collection. 在 ... -
MongoDB 聚集 Collections
2011-04-06 16:56 1681聚集Collections MongoD ... -
MongoDB 验证命令(Validate Command)
2011-04-06 15:12 1915验证命令(Validate Command) 使 ... -
MongoDB 查看和终止当前操作(Viewing and Terminating Current Operation)
2011-04-06 15:00 3746查看当前进程的操作 > db. ... -
MongoDB Last Error 命令
2011-04-06 14:38 2973Last Error Commands ... -
MongoDB 索引的命令 Index-Related Commands
2011-04-03 13:25 1375索引的 命令 创建索引 ... -
MongoDB 同步命令 fsync Command
2011-04-02 13:53 4331fsync Command ... -
MongoDB 复制数据库 Clone Database
2011-04-02 10:33 11461复制数据库Clone Database ... -
MongoDB里的database
2011-04-01 23:34 976数据库 每个MongoDB ... -
MongoDB的命令
2011-04-01 23:30 1106命令 介绍 Mo ...
相关推荐
MongoDB索引管理与高级索引.pdf 学习资料 复习资料 教学资源
MongoDB索引优化与管理-刘诚杰 天痕,介绍 1. 索引概念 2. 索引优化 3. 执行计划 4. 索引管理
MongoDB索引限制.pdf 学习资料 复习资料 教学资源
MongoDB索引管理.pdf 学习资料 复习资料 教学资源
MongoDB索引几乎和关系型数据库的索引一样.MongoDB的查询优化器能够使用这种数据结构来快速的对集合(collection)中的文档(collection)进行寻找和排序.准确来说,这些索引是通过B-Tree索引来实现的。在命令行中,可以...
MongoDB索引与查询.pdf 学习资料 复习资料 教学资源
MongoDB索引的创建docx.pdf 学习资料 复习资料 教学资源
主要介绍了SpringBoot MongoDB 索引冲突分析及解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
MongoDB数据库索引介绍.pptx
索引就像书的目录,如果查找某内容在没有目录的帮助下,只能全篇查找翻阅,这导致效率非常的低下;如果在借助目录情况下,就能很快的定位具体内容所在区域,效率会直线提高。 索引简介 首先打开命令行,输入mongo。...
MongoDB中的索引其实类似于关系型数据库,都是为了提高查询和排序的效率的,并且实现原理也基本一致。由于集合中的键(字段)可以是普通数据类型,也可以是子文档。MongoDB可以在各种类型的键上创建索引。下面分别讲解...
MONGO的索引跟MYSQL、ORACLE基本上差不多,实现了其中的一部分,当然了,肯定是没有它们功能齐全的,因为MONGO本质上也是基于磁盘文件的,所以如果索引的话,效率是不敢想像的!
本文讲述了关于MongoDB索引管理包括索引的创建、查看索引、删除索引各方面的命令及使用方法
MongoDB数据库
1. 普通索引 1. 单列索引 2. 多列索引 3. 子文档索引 2. 唯一索引 3. 稀疏索引 4. 哈希索引 5. 重建索引 6. 删除索引 7. 查看索引
一、索引基础1 二、唯一索引2 三、索引的一些参数3 一、索引基础 二、唯一索引 三、索引的一些参数 四、使用 explain 五、explain execut
mongodb-index-model 适用于人类的MongoDB索引工具包。例子var IndexModel = require ( 'mongodb-index-model' ) ;// e.g. from collection.getIndexes()var indexDefs = [ { 'v' : 1 , 'key' : { '_id' : 1 } , '...
主要描述了MongoDB索引相关的一些基础知识和使用技巧。 虽然MongoDB的索引在存储结构上都是一样的,但是根据不同的应用层需求,还是分成了唯一索引(unique)、稀疏索引(sparse)、多值索引(multikey)等几种类型...
同时,深入探讨MongoDB索引的类型(如单键索引、复合索引、多键索引等),并分析索引的创建、管理和优化策略。此外,文章还介绍了索引对查询性能的影响,包括如何通过explain()方法分析查询和索引效率,以及覆盖查询...