查询时间显示
explain()
在查询语句最后加入explain()
db.user.find({"x":1}).explain()
其中查询结果中
millis
就是查询时间,单位毫秒
全文索引
创建全文索引
- db.article.ensureIndex({content:"text"})
- db.article.ensureIndex({content:"text",tags:"text"})
- db.article.ensureIndex({"$**":"text"})
使用全文索引查询
每个数据集合只允许创建一个全文索引
- db.article.find({$text:{$search:"Qt"}})
- db.article.find({$text:{$search:"Qt ffmpeg"}}) //或查询,包含其中一个即可
- db.article.find({$text:{$search:"Qt ffmpeg -NodeJs"}}) //查询不包含NodeJs
- db.article.find({$text:{$search:"\"Qt\" \"ffmpeg\""}}) //与查询
使用explain()工具查看查询分析
新增三个参数:queryPlanner,executionStats,allPlansExecution,分别对应概要模式,执行状态模式,所有信息模式
executionStats.executionStages.stage
/*
TEXT: 使用全文索引查询时的stage返回
IXSCAN: 索引扫描
COLLSCAN: 全表扫描
LIMIT: 使用limit限制返回数
COUNT: 利用db.coll.count()之类进行count运算
COUNTSCAN: count不使用用Index进行count时的stage返回
COUNT_SCAN: count使用了Index进行count时的stage返回
*/
executionStats.executionStages.indexName
/*
使用的索引名
*/
导入导出
//导出
mongodump -h dbhost -d dbname -o dbdirectory
//导入
mongorestore -h dbhost -d dbname path
索引
复合索引
db.user.ensureIndex({"username":1,"age":-1})
该索引被创建后,基于 username 和 age 的查询将会用到该索引,或者是基于 username
的查询也会用到该索引.
但是只是基于 age 的查询将不会用到该复合索引。因此可以说,
如果想用到复合索引,必须在查询条件中包含复合索引中的前 N 个索引列。
然而如果查询
条件中的键值顺序和复合索引中的创建顺序不一致的话, MongoDB 可以智能的帮助我们调
整该顺序,以便使复合索引可以为查询所用。
索引的参数
- background - 默认
false
- unique
- name
- drapDups
创建索引时
background
为true,以使 MongoDB 在后台创
建索引,这样的创建时就不会阻塞其他操作。
但是相比而言,以阻塞方式创建索引,会使整
个创建过程效率更高,但是在创建时 MongoDB 将无法接收其他的操作。
账户权限
- 数据库用户角色: read、 readWrite;
- 数据库管理角色: dbAdmin、 dbOwner、 userAdmin;
- 集群管理角色: clusterAdmin、 clusterManager、 clusterMonitor、 hostManager;
- 备份恢复角色: backup、 restore;
- 所有 数据 库角 色: readAnyDatabase、 readWriteAnyDatabase、 userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色: root