MONGODB 索引 技术教程文章

mongodb建立索引时如何指定超时时间

mongodb自从2.2版本起为索引建立了TTL(time to live),可以指定一个类型为日期的字段为文档的索引并指定TTL(以秒为单位),mongodb内部每分钟执行一次检查TTL,如果超时则删除指定的文档,该特性用来实现session很适合。 使用java创建索引时,使用如下 //col为collection对象 BasicDBObject index = new BasicDBObject(); //_lastm为Date类型数据 index.put("_latm", 1); //第二个BasicDBObject用来指定文档的超时时间 col.crea...

MongoDB 索引相关知识【代码】

MongoDB和MySQL一样,都会产生慢查询,所以都需要对其进行优化:包括创建索引、重构查询等。现在就说明在MongoDB下的索引相关知识点,可以通过这篇文章MongoDB 查询优化分析了解MongoDB慢查询的一些特点。 执行计划分析: 因为MongoDB也是BTree索引,所以使用上和MySQL大致一样。通过explain查看一个query的执行计划,来判断如何加索引,explain在3.0版本的时候做了一些改进,现在针对这2个版本进行分析: 3.0之前:zjy:PRIM...

mongodb索引

whithin,box,center等选项进行查询 索引创建规则:基于实际的查询场景创建索引,考虑需要哪些键,是否需要联合索引,每个键的索引方向是怎么样,等等 如果需要对集合进行排序,如果对没有索引的键调用sory,mongodb则会把所有数据都提取到内存中进行排序,对数据的大小是有限制的。因此建议对需要sort的数据合理设置索引 擅于利用explain来查看查询对应的索引使用情况 创建索引的时候,最好在后台创建(创建时指定background: tr...

MongoDB学习(4)索引【图】

分享下mongodb中关于索引的基本操作,我们日常做开发都避免不了要对程序进行性能优化,而程序的操作无非就是CURD,通常我们 又会花费50%的时间在R上面,因为Read操作对用户来说是非常敏感的,处理不好就会被人唾弃,呵呵。 从算法上来说有5种经典的查找,具体的可以参见我的算法速成系列,这其中就包括我们今天所说的“索引查找”,如果大家对sqlserver比较了解 的话,相信索引查找能给我们带来什么样的性能提升吧。 我们首...

MongoDB之索引【代码】【图】

({“name”:”lf”,”age”:23,”isactive”:true}) db.lf.insert({“name”:”lf”,”age”:24,”isactive”:false}) db.lf.insert({“name”:”aaaa”,”age”:24,”isactive”:false}) db.lf.insert({“name”:”bbbb”,”age”:24,”isactive”:false}) db.lf.insert({“name”:”cccc”,”age”:24,”isactive”:false}) db.lf.insert({“name”:”aaaaa”,”age”:24,”isactive”:false}) db.lf.insert({“name”:”bbbb”,...

mongodb的索引【代码】

(var i=1;i<10;i++) { db.user2_collection.insert({name:i}) } WriteResult({ "nInserted" : 1 }) > db.user2_collection.find() { "_id" : ObjectId("55f69331cc1593a1bb113958"), "name" : 1 } { "_id" : ObjectId("55f69331cc1593a1bb113959"), "name" : 2 } { "_id" : ObjectId("55f69331cc1593a1bb11395a"), "name" : 3 } { "_id" : ObjectId("55f69331cc1593a1bb11395b"), "name" : 4 } { "_id" : ObjectId("55f69331cc1593...

MongoDB 覆盖索引查询【代码】

我们在 users 集合中创建联合索引,字段为 gender 和 user_name : >db.users.ensureIndex({gender:1,user_name:1}) 现在,该索引会覆盖以下查询: >db.users.find({gender:"M"},{user_name:1,_id:0}) 也就是说,对于上述查询,MongoDB的不会去数据库文件中查找。相反,它会从索引中提取数据,这是非常快速的数据查询。 由于我们的索引中不包括 _id 字段,_id在查询中会默认返回,我们可以在MongoDB的查询结果集中排除它。 下面的实...

MongoDB 索引限制

额外开销 每个索引占据一定的存储空间,在进行插入,更新和删除操作时也需要对索引进行操作。所以,如果你很少对集合进行读取操作,建议不使用索引。内存(RAM)使用 由于索引是存储在内存(RAM)中,你应该确保该索引的大小不超过内存的限制。 如果索引的大小大于内存的限制,MongoDB会删除一些索引,这将导致性能下降。查询限制 索引不能被以下的查询使用:正则表达式及非操作符,如 $nin, $not, 等。 算术运算符,如 $mod, 等。 $whe...

MongoDB 高级索引【代码】

以上文档包含了 address 子文档和 tags 数组。索引数组字段 假设我们基于标签来检索用户,为此我们需要对集合中的数组 tags 建立索引。 在数组中创建索引,需要对数组中的每个字段依次建立索引。所以在我们为数组 tags 创建索引时,会为 music、cricket、blogs三个值建立单独的索引。 使用以下命令创建数组索引: >db.users.ensureIndex({"tags":1}) 创建索引后,我们可以这样检索集合的 tags 字段: >db.users.find({tags:"cricke...

MongoDB数据量较大时如何构建索引--减少业务最少影响

。为了尽量降低建立索引对 MongoDB Server 的影响,有一种方法是把 MongoDB Server 转换成standalone模式后建立。具体做法如下:(1)首先把 secondary server 停止,在取消 --replSet 参数,并且更改 MongoDB port 之后重新启动 MongoDB,这时候 MongoDB 将进入 standalone 模式;(2).在 standalone 模式下运行命令 ensureIndex 建立索引,使用 foreground 方式运行也可以,建议使用background方式运行;(3)建立索引完毕之后关闭 se...

mongodb创建索引【代码】

}) 2.文档索引索引可以任何类型的字段,甚至文档: db.factories.insert( { name: "wwl", addr: { city: "Beijing", state: "BJ" } } ); //在addr 列上创建索引 db.factories.ensureIndex( { addr : 1 } ); //下面这个查询将会用到我们刚刚建立的索引 db.factories.find( { addr: { city: "Beijing", state: "BJ" } } ); //但是下面这个查询将不会用到索引,因为查询的顺序跟索引建立的顺序不一样 db.factories.find( { addr: { st...

[MongoDB]索引【代码】【图】

name":1})查询该collection上面已经创建了哪些索引 db.users.getIndexes() 通过查询发现该collection上面为id和name创建了索引,其中_id是默认的索引。 删除字段name上面的索引db.users.dropIndex({"name":1}) 复合索引 在name和age上面创建复合索引 db.users.ensureIndex({"name":1,"age":-1})该复合索引被创建后,基于name和age的查询将会用到该索引,或者是基于name的查询也会用到该索引,但是只是基于age的查询将不会用到该复合...

mongodb索引

一、索引基础: MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧。下面是创建索引的命令: > db.test.ensureIndex({"username":1}) 可以通过下面的名称查看索引是否已经成功建立: > db.test.getIndexes() 删除索引的命令是: > db.test.dropIndex({"username":1}) 在MongoDB中,我们同样可以创建复合索引,如: -- 数字1表示username键的索引按升序存储,-1表示age键的索...

mongodb index 的background 及集群的索引建立

e,drop,compat,当你在建立索引的时候运行这些操作的会报错。 Building Indexes on Secondaries 后台在primary 完成建立索引之后,建立索引操作才开始在 replica set secondaries 建立; 在secondaries 去建立一个大的索引最好的方法是去每次独立的重启一个secondary并且建立索引,在建立索引之后,在重新启动作为 replica set 成员,直到所有的secondary 建立完所有的索引,当所有的secondaries 建立完索引之后,重新启动primary...

mongodb数据文件结构——record是内嵌BSON的双向链表,多个record或索引组成extent【图】

数据文件结构 Extent 在每一个数据文件内,MongoDB把所存储的BSON文档的数据和B树索引组织到逻辑容器“Extent”里面。如下图所示(my-db.1和my-db.2 是数据库的两个数据文件):一个文件可以有多个Extent 每一个Extent只会包含一个集合的数据或者索引 同一个集合的数据或索引可以分布在多个Extent内。这几个Extent也可以分步于多个文件内 同一个Extent不会又有数据又有索引Record 记录 在每个Extent里面存放有多个”Record“, 每一...

mongodb学习笔记之索引(转)

一、索引基础: MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧。下面是创建索引的命令: > db.test.ensureIndex({"username":1}) 可以通过下面的名称查看索引是否已经成功建立: > db.test.getIndexes() 删除索引的命令是: > db.test.dropIndex({"username":1}) 在MongoDB中,我们同样可以创建复合索引,如: -- 数字1表示username键的索引按升序存储,-1表示age键的索...

mongodb 建立索引提示异常:WiredTigerIndex::insert: key too large to index, failing 1483【代码】

"ok" : 0.0,"errmsg" : "WiredTigerIndex::insert: key too large to index, failing 1483 { : \"山东隔断|山东隔断厂家|山东隔断价格|山东活动隔断|山东酒店活动隔断|烟台活动玻璃隔断|山东活动展板|山东隔??...\" }","code" : 17280 }MongoDB will not create an index on a collection if the index entry for an existing document exceeds the index key limit (1024 bytes). You can however create a hashed index or text...

mongodb中在嵌套子文档的文档上面建立索引

"keyPattern" : { "info" : 1 }, "indexName" : "info_1", "isMultiKey" : false, "isUnique" : false, "isSparse" : false, "isPartial" : false, "index...

【MongoDB】02、MongoDB索引及复制

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构1、索引的类型 B+ Tree、hash、空间索引、全...

【MongoDB】03、MongoDB索引及分片【代码】

mongodb配置文件/etc/mongodb.conf中的配置项,其实都是mongod启动选项(和memcached一样)[root@Node7 ~]# mongod --help Allowed options:General options: -h [ --help ] show this usage information --version show version information -f [ --config ] arg configuration file specifying additional options -v [ --verbose ] be more verbose (include multi...