mongodb

参考原文:http://www.cnblogs.com/yangecnu/archive/2011/07/19/2110989.html

[b]索引:[/b]是一种加快数据库查询速度而引入的对数据库数据进行排序用的,当然加入索引后会对数据的写的效率有影响,毕竟要插到索引指定的位置(要进行插入位置查找)。


mongodb:是以key-value方式进行存储的数据库。
为NoSQL数据库,不支持事务管理


[b]与mySQL区别:[/b]
集合-->数据表
文档-->一条记录
数据字段-->数据字段


以文件的方式进行数据的保存,不是以表格方式,(JSON方式保存数据)。
所以,数据没有像mySQL那样要设定固定的字段,它可以向前兼容并可以方便增加字段。


如果没有索引,MongoDB会在遍历所有的键值对,然后去对应检查相关的字段。


[b]默认索引[/b]
对于每一个集合(除了capped集合),默认会在_id字段上创建索引,而且这个特别的索引不能删除。_id字段是强制唯一的,由数据库维护。


[b]嵌套关键字[/b]
在MongoDB中,甚至能够在一个嵌入的文档上(embedded)建立索引.
> db.things.ensureIndex({"address.city":1})


[b]文档作为索引[/b]
任何类型,包括文档(document)都能作为索引:
> db.factories.insert({name:"xyz",metro:{city:"New York",state:"NY"}});
> db.factories.ensureIndex({metro:1});


[b]组合关键字索引[/b]
除了基本的以单个关键字作为索引外,MongoDB也支持多个关键字的组合索引,和基本的索引一样,也是用ensureIndex()函数,该函数可以指定多个键。
> db.things.ensureIndex({j:1,name:-1})


[b]稀疏索引[/b]
和稀疏矩阵类似,稀疏索引就是索引至包含被索引字段的文档。
任何一个稀疏的缺失某一个字段的文档将不会存储在索引中,之所以称之为稀疏索引就是说缺失字段的文档的值会丢失。
稀疏索引的创建和完全索引的创建没有什么不同。使用稀疏索引进行查询的时候,某些由于缺失了字段的文档记录可能不会被返回,这是由于稀疏索引只返回被索引了的字段。


[b]唯一索引[/b]
MongoDB支持唯一索引,这使得不能插入在唯一索引项上已经存在的记录。
例如,要保证firstname和lastname都是唯一的,命令如下
> db.things.ensureIndex({firstname:1,lastname:1},{unique:true})


[b]缺失的键[/b]
当一个文档以唯一索引的方式保存到集合中去的时候,任何缺失的索引字段都会一null值代替,因此,不能在唯一索引上同时插入两条缺省的记录。如下:
>db.things.ensureIndex({firstname: 1}, {unique: true});
>db.things.save({lastname: "Smith"});
>db.things.save({lastname: "Jones"});// 会产生错误,因为firstname会有两个null.


[b]重复值:[/b]
唯一索引不能够创建在具有重复值的键上,如果你一定要在这样的键上创建,那么想系统将保存第一条记录,剩下的记录会被删除,只需要在创建索引的时候加上dropDups这个可选项即可。


[b]注意:[/b]
1.MongoDB中索引是大小写敏感的。
2.当更新对象是,只有在索引上的这些key发生变化时才会更新。着极大地提高了性能。当对象增长了或者必须移动时,所有的索引必须更新,这回很慢 。
3.索引信息会保存在system.indexes 集合中,运行 db.system.indexes.find() 能够看到这些示例数据,
4.索引的字段的大小有最大限制,目前接近800 bytes. 可在大于这个值的字段上建立索引是可以的,但是该字段不会被索引,这种限制在以后的版本中可能被移除。


[b]索引的性能[/b]
索引使得可以通过关键字段获取数据,能够使得快速查询和更新数据。但是,必须注意的是,索引也会在插入和删除的时候增加一些系统的负担。往集合中插入数据的时候,索引的字段必须加入到B-Tree中去,因此,索引适合建立在读远多于写的数据集上,对于写入频繁的集合,在某些情况下,索引反而有副作用。不过大多数集合都是读频繁的集合,所以集合在大多数情况下是有用的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jie310600

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值