mongodb建索引的策略

来源:互联网 发布:青岛java培训学校 编辑:程序博客网 时间:2024/04/30 08:51

该如何建立有效索引

现在有这么一个查询条件,数据库里的数据总量是60087条数据:

db.t_f10_company_executives_01.find({symbol:"000002",status:1}).sort({fce1_03:-1})

如果不建立索引的话,需要1.6s左右时间。

后来我建立如下索引:
db.t_f10_company_executives_01.ensureIndex({fce1_03:-1,symbol:1,status:1});

那它走了那个索引呢?执行下面语句

db.t_f10_company_executives_01.find({symbol:"000002",status:1}).sort({fce1_03:-1}).explain()
结果是(执行时间是0.078s):
{    "cursor" : "BtreeCursor fce1_03_-1_symbol_1_status_1",    "isMultiKey" : false,    "n" : 25,    "nscannedObjects" : 25,    "nscanned" : 4044,    "nscannedObjectsAllPlans" : 4067,    "nscannedAllPlans" : 8086,    "scanAndOrder" : false,    "indexOnly" : false,    "nYields" : 10,    "nChunkSkips" : 0,    "millis" : 22,    "indexBounds" : {        "fce1_03" : [             [                 {                    "$maxElement" : 1                },                 {                    "$minElement" : 1                }            ]        ],        "symbol" : [             [                 "000002",                 "000002"            ]        ],        "status" : [             [                 1,                 1            ]        ]    },    "server" : "10-10-120-241:27018",    "millis" : 22}
我们肯定希望nscanned的值接近n的值才是最理想的。于是把刚刚建立的索引删除:`db.t_f10_company_executives_01.dropIndex("fce1_03_-1_symbol_1_status_1")`我们现在把symbol与fce1_03字段调整下顺序:`db.t_f10_company_executives_01.ensureIndex({fce1_03:-1,symbol:1,status:1});`再次执行,效果是:
db.t_f10_company_executives_01.find({symbol:"000002",status:1}).sort({fce1_03:-1}).explain()
{    "cursor" : "BtreeCursor symbol_1_status_1_fce1_03_-1",    "isMultiKey" : false,    "n" : 25,    "nscannedObjects" : 25,    "nscanned" : 25,    "nscannedObjectsAllPlans" : 25,    "nscannedAllPlans" : 25,    "scanAndOrder" : false,    "indexOnly" : false,    "nYields" : 0,    "nChunkSkips" : 0,    "millis" : 0,    "indexBounds" : {        "symbol" : [             [                 "000002",                 "000002"            ]        ],        "status" : [             [                 1,                 1            ]        ],        "fce1_03" : [             [                 {                    "$maxElement" : 1                },                 {                    "$minElement" : 1                }            ]        ]    },    "server" : "10-10-120-241:27018",    "millis" : 0}

个人总结:建立索引时,过滤字段放到前面,排序字段建议放到后面。

1 0
原创粉丝点击