一、索引简介
MongoDB 的索引几乎与传统的关系型数据库索引一模一样。
1.1、创建索引
————————————————————————
> db.ysq.
ensureIndex({
"username":
1})
————————————————————————
为了便于区分,将上面的索引称为单键索引,多键索引如下
————————————————————————
> db.ysq.ensureIndex({
"date":
1,
"username":
1})
————————————————————————
* 组值为1或-1的键,表示索引创建的方向。单键索引的方向无关紧要,多键索引的方向则会影响查询;
* MongoDB会安装索引的方向来组织文档;
* 如果索引包含N个键,则对于前几个键的查询都会有帮助;
* MongoDB的查询优化器会重排查询项的顺序,以便利用索引;
* 创建索引的缺点:每次插入、更新、删除时都会产生额外开销;
* 每个集合默认的最大索引个数为64个
建立索引时要考虑如下问题:
1、会做什么样的查询?其中哪些键需要索引?
2、每个键的索引方向是怎样的?
3、如何应对扩展?有没有种不同的键的排列可以使常用数据更多地保留在内存中?
后台创建索引:
————————————————————————
> db.ysq.ensureIndex({
"comments.date"
:
1}, {
"backgroup"
:true})
将不阻塞建立索引期间的所有请求。
索引内嵌文档中的键:
————————————————————————
> db.ysq.ensureIndex({
"comments.date":
1})
————————————————————————
注意:如果对没有索引的键调用sort,MongoDB需要将所有数据提取到内存来排序。因此,可以做无索引排序是有上限的。一旦集合大到不能再内存中排序,MongoDB就会报错。
1.2、 索引名称
默认:keyname1_dir1_keyname2_dir2_..._keynameN_dirN
指定自定义名称:
————————————————————————
db.ysq.ensureIndex({
"a"
:
1,
"b"
: