索引 通常能够极大的提高查询的效率。在系统中使用查询时,应该考虑建立相关的索引。在MongoDB中创建索引相对比较容易。
中的索引在概念上和大多数关系型数据库如mysql是一样的。当你在某种情况下需要在MySQL中建立索引,这样的情景同样适合于MongoDB。
基本操作
索引是一种数据结构,他搜集一个集合中文档特定字段的值。MongoDB的查询优化器能够使用这种数据结构来快速的对集合(collection)中的文档(collection)进行寻找和排序.准确来说,这些索引是通过B-Tree索引来实现的。
在命令行中,可以通过调用ensureIndex()函数来建立索引,该函数指定一个到多个需要索引的字段。沿用在前面的随笔中的例子,我们再things集合中的j字段上建立索引:
EnsureIndex()函数自是在索引不存在的情况下才会创建。
一旦集合在某一个字段上建立索引后,对该字段的随机查询的访问速度会很快。如果没有索引,MongoDB会在遍历所有的键值对,然后去对应检查相关的字段。
通过在命令行中输入getIndexs()能够查看当前集合中的所有索引。
通过db.system.indexes.find()能够返回当前数据库中的所有索引
默认索引
对于每一个集合(除了cAPPed集合),默认会在_id字段上创建索引,而且这个特别的索引不能删除。_id字段是强制唯一的,由数据库维护。
嵌套关键字
在MongoDB中,甚至能够在一个嵌入的文档上(embedded)建立索引.
文档作为索引
任何类型,包括文档(document)都能作为索引:
创建文档索引的一个替代方法是创建复合索引,例如:
组合关键字索引
除了基本的以单个关键字作为索引外,MongoDB也支持多个关键字的组合索引,和基本的索引一样,也是用ensureIndex()函数,该函数可以指定多个键。
当创建索引时,键后面的数字表明了索引的方向,取值为1或者-1,1表示升序,-1表示降序。升序或者降序在随机访问的时候关系不大,当时在做排序或者范围查询的时候就很重要了。
如果在建立了a,b,c这样一个复合索引,那么你可以在a,A,b和a,b,c上使用索引查询。
稀疏索引
和稀疏矩阵类似,稀疏索引就是索引至包含被索引字段的文档。
任何一个稀疏的缺失某一个字段的文档将不会存储在索引中,之所以称之为稀疏索引就是说缺失字段的文档的值会丢失。
稀疏索引的创建和完全索引的创建没有什么不同。使用稀疏索引进行查询的时候,某些由于缺失了字段的文档记录可能不会被返回,这是由于稀疏索引子返回被索引了的字段。可能比较难以理解,不过看几个例子就好理解了。
唯一索引
MongoDB支持唯一索引,这使得不能插入在唯一索引项上已经存在的记录。例如,要保证firstname和lastname都是唯一的,命令如下
缺失的键
当一个文档以唯一索引的方式保存到集合中去的时候,任何缺失的索引字段都会一null值代替,因此,不能在唯一索引上同时插入两条缺省的记录。如下:
重复值:
唯一索引不能够创建在具有重复值的键上,如果你一定要在这样的键上创建,那么想系统将保存第一条记录,剩下的记录会被删除,只需要在创建索引的时候加上dropDups这个可选项即可
删除一个特定集合上的索引:

删除集合中的某一个索引:
也可以直接执行命令进性删除
重建索引:
可以所用如下命令重建索引:
通常这是不必要的,但是在集合的大小变动很大及集合在磁盘空间上占用很多空间时重建索引才有用。对于大数据量的集合来说,重建索引可能会很慢。
注:
MongoDB中索引是大小写敏感的。
当更新对象是,只有在索引上的这些key发生变化时才会更新。着极大地提高了性能。当对象增长了或者必须移动时,所有的索引必须更新,这回很慢 。
索引信息会保存在system.indexes 集合中,运行 db.system.indexes.find() 能够看到这些示例数据。
索引的字段的大小有最大限制,目前接近800 bytes. 可在大于这个值的字段上建立索引是可以的,但是该字段不会被索引,这种限制在以后的版本中可能被移除。
索引的性能
索引使得可以通过关键字段获取数据,能够使得快速查询和更新数据。
但是,必须注意的是,索引也会在插入和删除的时候增加一些系统的负担。往集合中插入数据的时候,索引的字段必须加入到B-Tree中去,因此,索引适合建立在读远多于写的数据集上,对于写入频繁的集合,在某些情况下,索引反而有副作用。不过大多数集合都是读频繁的集合,所以集合在大多数情况下是有用的。
使用sort()而不需要索引
如果数据集合比较小(通常小于4M),使用sort()而不需要建立索引就能够返回数据。在这种情况下,做好联合使用limit()和sort()。
关于MongoDB索引的创建和使用就介绍到这里,希望能对各位有所帮助,您的收获将是我最大的快乐!
【编辑推荐】
怎样深入学习php,成为php高手?
课程:MySQL数据库的创建、修改及删除;数据表的创建、修改及删除;无限分类的数据表设计;记录的插入、更新、删除及查找;外键与连接;索引;存储过程,触发器,游标;事务处理;数据库引擎详解;数据库集群,数据库读写分离、类与对象,类的定义;属性与方法;$this关键字、 self关键字;继承,多态;魔术方法;抽象类与接口;设计模式;PDO类;JpGraph图表,FusionCharts图表;PHP高级应用(Smarty模板、PHP框架技术)等。
王迈迈英语最新六级考试预测试卷与详解 710分新题型 听力 作文强化版
首先,我有个问题,楼主为什么听模拟题的的听力?其次在下四级587分,六级622分,向你简单提点意见,原创:你首先要记住这一点,六级考的是速度,一定要控制好速度,不要慢了,特别是阅读理解,千万不能在那儿停留太长的时间。 1.关于听力,据我的经验,你只需把历年六级真题听烂即可,怎么一个烂法?就是你按着六级考试规定的时间,听一套听力,对一遍答案,记住千万别看原文。 然后着重听错的,反复听,实在听不懂才去翻原文,一定记住这一点了,不然就没有效果了。 还有那个听写,我给你提点建议,只要听懂大意,听懂个别关键词即可,然后可以自己编。 还有就是能提前看题就提前看题。 还有一些基础的,我记得我是在六级考试前听了王长喜的词汇书后附带的一个光盘,它有这几个特点:⒈没有汉语朗读,完全是英语;2.较长的停顿时间。 我感觉这样做有两个好处:1.记单词,我发现再听朗读中回想单词是记单词一个很好的过程,前提是你要反复听,直到实在听不懂了才去看书;2.练听力,根据我的经验,你不仅记住了每个单词的读音,如果有词组句子的话,效果会更好,跟上面一样那个你要反复听,直到实在听不懂了才去看书。 2.关于词汇,我不知道你掌握情况怎么样,假如我是你这种情况的话我会先把核心词汇先掌握住。 怎么掌握?星火词汇书应该有吧?后面是不是一般都附有索引,我建议你现在先把后面的索引过一遍。 怎么过?就是仅看后面的索引,然后回想,这时就会碰见完全熟的单词,半熟半生的单词以及完全陌生的单词。 你应该明白了到底记什么了吧?就是后面那两类,限于时间的短促,咱们不可能从第一页翻到最后一页,现在只能记不会的单词。 明白了吧?还有如果你没有星火词汇的,我这儿有些核心词汇资料可以发给你,记住现在一定要把生词干掉!3.关于阅读理解,我只有一点意见,一定要控制好速度,不要慢了,但也得保证质量。 4.关于完形填空,跟高考难易程度相当,只要有时间做都能拿分,关键到时老没时间。 5.关于作文,我简单提点建议,首先在网上搜点模块,俯拾皆是,找不到了问我要,然后考前这段时间,最好能练几篇,通过练把这些模块内化成自己的。 怎么练?就是你可以找一些真题,最好带些范文。 自己写一句,就想想模块中有自己可以用的句子没,或者就直接看着那些模块,看哪些句子可以用的上,自己就写好好再与范文对照一下,看看差距在哪儿,最好也能把范文中的句子据为己有。 知道我什么意思吧?不过这只适合考前较长的时间练习,临近考试的时候可别这样练呀!希望对你有帮助,也祝你顺利通过。
学习室内设计的施工流程
了解施工图的图类首先,先要知道施工图的图类:第一种:平面图第二种:立面图第三种:剖面图(大样图/节点图)简称:平立剖完整的施工图就是要上面这几种,还要有:封面,目录以及封底,透明夹包装好就OK了。 要明确一点的就是,施工图是给施工人员看的,因为他们要根据设计师的图纸进行施工,业主一般只看平面规划图,因为其它的图纸或许都看不懂,也没有必要看。 所以业主一般只看平面规划图,还要房间内的效果图,效果图就要用到另外一个软件:3DMAX。 这也是美国autodesk公司所开发的一种高级的可渲染的画图软件,autocad我们只要用来画施工图即可,虽然里面也有三维空间的模式,但是渲染出来的效果远远比3DMAX要差得多,所以不提倡autocad用来画效果图。 “室内家装施工图”的基本设计流程:A·原始平面图(这是最原始的格局,没有内墙,没有电路,水路等等,只有外墙 承重墙以及水管等等,这种房简称毛坯房)首先,我们要组织人员到工地量房,画出草图,并带回公司画出原始平面图,原天花结构图。 {注意量房的细节,并要学会照相的技巧}。 然后你要根据业主的情况设计3个以上的方案,就是下面B-平面规划方案。 B·平面规划图(平面规划图就是对这套房的平面格局,尺寸要符合人体工程学,例如把内墙设置成210mm,把室内门设置为1000mm,衣柜的深度为300mm,这些是完全不符合的。 所以要明确清楚家装的尺寸。 )这套拥有非常多的规划方案的毛坯房,所以你在规划的时候要站在业主的角度去设计。 所以你画完这张规划图纸后就可以与业主做详细地沟通~。 如果他觉得这样不妥当,我们可以更改到他想要的方案,直到业主满意,一旦业主满意了,就需要学会引导客户并介绍装修材料,例如地砖,地板,木地板,墙纸等。 必要时就要与业主一起去选购,陪业主去挑选一些材料。 而且要开始着手画C了。 再与业主探讨装修的风格,对比以前做过的成功案例,确定好风格。 【有些业主就比较难应对,隔段时间就跑来跟你说这平面规划图要更改,哪里哪里要改,哪里哪里要重新再规划,所以这时候你又要重新开始了,没办法,“业主是上帝”;有些就比较随意,你设计出来的他满意,只要稍微修改点地方就好,这样的业主就算是不错的。 】C·地面材质图、原天花结构图、天花布置平面图、插座布置平面图、·照明开关布置平面图、·水路平面图、·施工索引平面图。 当平面规划图确定好了以后就要开始着手画这7张平面图图纸,这七张图纸对施工人员来说也是非常重要的。 D·立面图及剖面图,就是指房间内各个方向的立面图,这些图纸的排列方式是要根据施工索引图进行索引。 立面图的难度比平面图要大得多。 (入户阳台,客厅,餐厅,厨房,主卫,公卫,主卧,次卧,通道,衣柜内部结构图等立面图…)我们画图就要做到三点:快速,高效,准确。
发表评论