mongodb 3.0索引的介绍

索引类型:
样例数据

    db.account.insert({_id:1,
            account:"xiao",
            password:"xxxxx",
            type:"1",
            userinfo:[
                    {name:'xiao',sex:'M',phone:"158893242"},
                    {name:'xiao1',sex:'M',phone:"158893243"},
                    {name:'xiao2',sex:'W',phone:"158893244"},
                ],
            createTime:""
            })
1. _id: 默认具有一个索引(无需手动创建,系统会自动创建)如果没有指定_id 会自动创建一个12字节的objectid

2.单域:就是单个域(字段)创建索引, 如 db.account.createIndex({account:1})

3.组合: 就是多个字段组合起来, 如 db.account.createIndex({account:1,password:1})

4.多键: 就是一个字段里包含数组,数组里面又有字段, 就如 userinfo
    我们想查找用户为xiao1的账户,为了加快速度,我们需要为name 建立多键索引,
    如 db.account.createIndex({"userinfo.name":1}) , userinfo使用explain 会看到 "isMultiKey" : true
5. 地理:  分球型 跟 平面型,这个后面再详细讲解
6. 文本:就是一个字符串,或者一个字符串的数组, 如 db.account.createIndex( { userinfo: "text" } ),
    一个集合最多只有一个文本索引,使用$text 进行文本索引 { $text: { $search: <string>, $language: <string> } }
7. 哈希: 不支持 multi-key ,支持分片key,支持等值查询,不支持范围查询,
    不支持创建组合索引,但是可以创建hash 跟 普通的2 个索引
    db.account.createIndex( { account: "hashed" } )
索引的属性
  a. Unique Indexes, 
    不允许记录有重复值,允许唯一列值,存在一条不包含该列的记录,如下
db.a.insert({x:1,y:'a'})
        db.a.insert({x:2,y:'b'})
        db.a.createIndex({x:1},{unique:true})
        db.a.insert({y:'c'})  ### 唯一约束 允许这值存在
        db.a.insert({y:'d'})  ### 已经存在一条,所以报错
            "code" : 11000,
            "errmsg" : "E11000 duplicate key error collection: test.a index: x_1 dup key: { : null }"
  b. Sparse Indexes, 就是如何索引域不存在,那么就不会有索引记录,可以结合唯一索引去拒绝没有域的重复记录
    他仅仅只对这个索引列有列名(包括列为null)的记录创建索引,如:集合scores,他有下列数据
        db.scores.insert( { "userid": "AAAAAAA", "score": 43 } )
        db.scores.insert( { "userid": "BBBBBBB", "score": 34 } )
        db.scores.insert( { "userid": "CCCCCCC" } )
        db.scores.createIndex({score:1},{sparse:true})  ### 创建稀疏索引
    那么 score_1 这个稀疏(sparse)索引 不包含 { "userid": "CCCCCCC" }的记录
    如果使用sort 函数对score字段排哦排序那么是不使用稀疏索引的,如
        db.scores.find().sort({score:-1})  ###  这个是不使用sparse索引的,若要使用hint
        db.scores.find().sort({score:-1}).hint({score:1}) ### 使用的sparse索引,但是返回的记录不完全(只返回有score列,没这个列的值不返回数据)
    也可以创建稀疏唯一索引,
        如:db.scores.createIndex({score:1},{sparse:true,unique:true})  ### 创建稀疏唯一索引 
        作用:限制score不重复,并且对没有score列的记录不做限制, 注意跟唯一索引对比一下

    c. TTL Indexes , 就是设定一个时间,后台会自动清理过期数据
    如果这个列是数组,数组里面有多个日期,那么就会用最早的日期,
    如果不是日期,或者日期数组那么是不会生效的
    下面是创建TTL索引的样例:
        db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } )

猜你喜欢

转载自blog.csdn.net/Brighter_Xiao/article/details/81282842