一、索引
1. 索引的含义和特点
• 索引是特殊的数据结构,存储在一个易于遍历读取的数据集合中,是对数据库表中一列或多列的值进行排序的一种结构。
• 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
• 这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要 花费几十秒甚至几分钟,这对网站的性能是非常致命的。
2. 创建索引
2.1 createIndex() 方法创建索引
语法格式如下:
db.collection.createIndex(keys, options)
• 参数含义: Key 值为你要创建的索引字段,1 为指定按升序创建索引;按降序来 创建索引指定为 -1 即可, 如:(age,-1)。
2.2 设置多个字段索引(关系型数据库中称作复合索引)。
创建索引语法:
db.集合的名字.createIndex(待创建索引的列[,额外的选项])
待创建索引的列:{键:1,…,键:-1} 1升序,-1降序
额外选项:设置索引的名称或者唯一索引等
3. 删除索引
删除索引语法:
全部删除:
db.集合名字.dropIndexes()
删除指定:
db.集合名字.dropIndex(索引的名字)
4. 查看索引
db.集合名字.getIndexes()
5. 索引案例
//给name添加普通索引
db.mycol.createIndex({name:1});
//查看索引
db.mycol.getIndexes();
//删除索引
db.mycol.dropIndex("name_1")
//给name创建索引并起名字indexabc
db.mycol.createIndex({name:1},{name:"indexabc"})
//创建复合/组合索引
//语法:db.集合的名字.createIndex({键:值,键:值})
//创建唯一索引
//语法:db.集合名字.createIndex(待添加的列,{unique:“列名”})
//测试唯一索引
db.mycol.insert({name:"a"})
db.mycol.insert({name:"a"}) //插入不进来
//删除全部索引,系统的不能删除
6. 全文检索
全文检索是对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
这个过程类似于通过字典中的检索字表查字的过程。MongoDB从2.4版本开始,支持15种语言(包括英语、法语等)的全文检索(不包括中文),使用全文索引可以提高搜索效率。
6.1 启用全文检索
MongoDB2.6版本以后,都是默认自动开启全文检索 。如果没有自动开启,可以使用以下方式开启全文检索:
db.adminCommand({setParameter:true,textSearchEnabled:true})
或者使用 命令: mongod --setParameter textSearchEnabled=true
6.2 创建全文索引
• 现有一个集合(post)中的文档
• 包含了post_text和tags两个内容
{
post_text:"i am fine,thanks,and you?",
tags:["mysql","mongoDB"]
}
可以对post_text字段建立全文索引:
db.posts.createIndex({post_text:"text"})
在创建了全文索引后,可以搜索文章中的关键词 thanks:
db.posts.find({$text:{$search:"thanks"}})
6.3 删除全文索引
先使用命令查询出集合中使用的索引:
db.posts.getIndexes()
找出来之后,可以使用以下命令进行删除(本案例中的索引 名称为:post_text_text):
db.posts.dropIndex("post_text_text")
7. 索引的限制
• 额外开销。每个索引占据一定的存储空间,在进行插入,更新和删除操作时也需要对索引进行操作。
• 内存(RAM)使用。如果索引的大小大于内存的限制,MongoDB会删除一些索引, 这将导致性能下降。
• 查询限制。索引不能被以下的查询使用:正则表达式及非操作符,如 $nin, $not, 等;算术运算符,如 $ mod, 等;$ where 子句。
• 索引键限制。从2.6版本开始,如果现有的索引字段的值超过索引键的限制, MongoDB中不会创建索引。
• 插入文档超过索引键限制。
• 最大范围。集合中索引不能超过64个;索引名的长度不能超过128个字符;一个 复合索引最多可以有31个字段。
二、数据库备份与恢复
1. 数据库备份
• 在Mongodb中使用mongodump命令来备份MongoDB数据。
• 该命令可以导出所有数据到指定目录中。
• mongodump命令可以通过参数指定导出的数据量级转存的服务器。
语法格式:
mongodump -h dbhost -d dbname -o dbdirectory
参数解释:
• -h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号: 127.0.0.1:27017
• -d:需要备份的数据库实例,例如:test
• -o:备份的数据存放位置(该目录需要提前建立),在备份完成后,系统自动在该目 录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
2. 数据库恢复
mongodb使用 mongorestore 命令来恢复备份的数据。
mongorestore命令脚本语法如下:
mongorestore -h <hostname><:port> -d dbname <path>
参数解释:
• --host <:port>, -h <:port>:MongoDB所在服务器地址,默认为: localhost:27017
• -d :需要恢复的数据库实例。
•