一、什么是索引。
索引通常能够极大的提高查询的效率,如果没有索引,在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
二、索引的操作方法。
1。创建普通索引。
,,,, MongoDB方法createIndex()方法基本语法格式如下所示:
,,db.collection。createIndexkeys选择
语法中值为你要创建的索引字段,为指定按升序创建索引,如果你想按降序来创建索引指定为即可。
,,,,,,,, db.col.createIndex {“title": 1}
,,#语法中值为你要创建的索引字段,为指定按升序创建索引,如果你想按降序来创建索引指定为即可。
,,,, #方法createIndex方法下有如下参数。
,,,,
方法createIndex()接收可选参数,可选参数列表如下:
ParameterTypeDescriptionbackgroundBoolean建索引过程会阻塞其它数据库操作,背景可指定以后台方式创建索引,即增加“background"可选参数。“background"默认值为<强>假强> .uniqueBoolean建立的索引是否唯一。指定为真正创建唯一索引。默认值为<强>假强> .namestring索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称.dropDupsBoolean在建立唯一索引时是否删除重复记录,指定真创建唯一索引。默认值为,<强>假强> .sparseBoolean对文档中不存在的字段数据不启用索引,这个参数需要特别注意,如果设置为真正的话,在索引字段中不会查询出不包含对应字段的文档. .默认值为,<强>假强>。expireAfterSecondsinteger指定一个以秒为单位的数值,完成TTL设定,设定集合的生存时间.vindex版本索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本.weightsdocument索引权重值,数值在1到99999之间,表示该索引相对于其他索引字段的得分权重.default_languagestring对于文本索引,该参数决定了停用词及词干和词器的规则的列表。默认为英语language_overridestring对于文本索引,该参数指定了包含在文档中的字段名、语言覆盖默认的语言,默认值为语言。2。创建唯一索引。
{“title": 1},{独特:真}
当联合查询的操作比较多,推荐使用联合索引。
“p2”例:
db.user.createIndex{& # 39;高度# 39;:1}{& # 39;生日# 39;:1}
4。查索引是否生效。
,,,,当执行了一个查询操作,想知道这个查询操作是否走了索引,还是全表查询,可以使用解释()这个方法来查看。
,,db.tmp.find ({“name":“aaa"}) .explain ()
,,,, #我们只需要关注结果返回字的阶段段,当舞台字段为
5。全文索引。
,,,,,,,,注意! !一个集合中,只能创建一个全文索引! !但是全文索引可以建多个列! !
,,,,,,创建全文索引:
,,,,,db.tmp.createIndex {“testtxt": & # 39; & # 39; text"}
,,,,,当创建了全文索引后,按照之前正常的查询方法是不会经过全文索引的,如果查找需要经过全文索引,需要有特殊的语法。
,,,,,,,
,,,,,,,, db.tmp.find {testtxt:“aaa"}
,,,,,,,, db.tmp.find{$文本:{$搜索:“aaa"}}
,,,,,db.tmp.find $文本:{$搜索:“亚由美kodakumi"}
,,,,,,,,