索引实战技巧


  • 註冊用戶

    索引类型

    虽然MongoDB的索引在存储结构上都是一样的,但是根据不同的应用层需求,还是分成了唯一索引(unique)、稀疏索引(sparse)、多值索引(multikey)等几种类型。

    唯一索引

    唯一索引在创建时加上unique:true 的选项即可,创建命令如下:

    db.users.ensureIndex({username: 1}, {unique: true})

    上面的唯一索引创建后,如果insert一条username已经存在的数据,则会报如下的错误:

    E11000 duplicate key error index: gardening.users.$username_1 dup key: { : "kbanker" }

    如果你在一个已有数据的collection上创建唯一索引,若唯一索引对应的字段原来就有重复的数据项,那么创建会失败,我们需要加上一个dropDups的选项来强制将重复的项删除掉,命令如下例:

    db.users.ensureIndex({username: 1}, {unique: true, dropDups: true})

    松散索引

    如果你的数据中一些行中没有某个字段或字段值为null,那么如果在这个字段上建立普通索引,那么无此字段或值null的行也会参与到索引结构中,占用相应的空间。如果我们不希望这些值为空的行参与到我们的索引中,这时候可以采用松散索引,松散索引只会让指定字段不为空的行参与到索引创建中来。创建一个松散索引可以用下面的命令:

    db.reviews.ensureIndex({user_id: 1}, {sparse: true})

    多值索引

    MongoDB可以对一个array类型创建索引,比如像下面的结构,MongoDB可以在tags字段上创建索引:

    { name: "Wheelbarrow",
    tags: ["tools", "gardening", "soil"]
    }

    在生成索引时,会为tags中的三个值分别生成三个索引元素,索引中tools,gardening,soil三个值都会指向这同一行数据。相当于分裂成了三个独立的索引项。

    索引管理

    索引的创建和删除

    创建和删除索引的方法有很多种,下面两个是比较原始的方法,通过对system.indexes这个collection进行相应的写操作来完成索引的创建:

    spec = {ns: "green.users", key: {‘addresses.zip’: 1}, name: ‘zip’}
    db.system.indexes.insert(spec, true)

    上面命令往system.indexes中写入一条记录来创建索引,这条记录包含了要在上面创建索引的collection的名字空间,索引的信息,以及索引的名称。

    创建完成后,我们可以通过下面命令找到我们创建的索引:

    db.system.indexes.find()
    { "_id" : ObjectId("4d2205c4051f853d46447e95"), "ns" : "green.users",
    "key" : { "addresses.zip" : 1 }, "name" : "zip", "v" : 0 }

    要删除一个已创建的索引,我们可以使用下面的命令来实现:

    use green
    db.runCommand({deleteIndexes: "users", index: "zip"})

    创建索引命令

    实际上创建索引还有更方便的命令,那就是ensure

    本帖下載内容已隐藏,请登入以查看隐藏内容!


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待