【MongoDB学习笔记21】MongoDB的复合索引-创新互联

索引的值是按照一定顺序排列的,因此使用索引键对文档进行搜索排序比较快;但是只有首先使用索引进行排序时,索引才有用;

创新互联长期为上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为永定企业提供专业的成都网站建设、成都网站制作,永定网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。

例如下面的排序里,“username”上的索引就没有起作用:

> db.users.find().sort({"age":1,"username":1})

上面的命令中先根据age排序,在根据username排序,所以username作用并不大。为了优化这个排序,需要在age和username上建立索引:

> db.users.ensureIndex({"age":1,"username":1})

这样就在users集合上建立了一个复合索引(compound index),复合索引就是一个建立在多个字段上的索引。

一、选择索引的方向

索引默认是升序的,在多索引查询的时候,可能需要让索引键的方向不同。例如:

> db.users.ensureIndex({"age":1,"username":-1})

或者

> db.users.ensureIndex({"age":-1,"username":1})

二者是等价的;

年龄按照0-9的顺序排序,在每个年龄分组中安装Z-A的顺序排列;或者用户名按照A-Z的顺利排序,在每个用户分组中按照9-0排序的。

二、使用隐式索引

复合索引在对不同的查询可以表现为不同的索引。如果有一个{"age":1,"username":1}索引,age字段会自动被排序,好似有个{“age”:1}的索引;

可以推论,如果有{“a”:1,”b”:1……..”z”:1}的索引,就会有{“a”:1},{“a”:1,”b”:1},{“a”:1,”b”:1,“c”:1}….一系列的索引;

但是,{“b”:1}或者{”b”:1,“c”:1}就不能作为索引来优化查询,意味着只能只能按照索引顺序来优化查询。

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站名称:【MongoDB学习笔记21】MongoDB的复合索引-创新互联
分享URL:http://pwwzsj.com/article/dcohip.html