mongodb建索引的策略
2016-10-21 09:44
190 查看
该如何建立有效索引
现在有这么一个查询条件,数据库里的数据总量是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 }
个人总结:建立索引时,过滤字段放到前面,排序字段建议放到后面。
相关文章推荐
- 为什么MongoDB采用B树索引,而Mysql用B+树做索引
- 第七课 MongoDB 特殊索引
- mongodb 使用sort时的索引利用问题探究
- MongoDB的基础查询和索引操作方法总结
- MongoDB范围查询的索引优化
- Schema的优化和索引 - 高性能的索引策略
- MongoDB学习 索引
- 跟四分卫一起学MongoDB - 索引
- 8天学习MongoDB——第四天 索引操作
- MongoDB中的索引
- 高性能索引策略(上)
- MongoDB范围查询的索引优化
- 使用NOSQL的MongoDB时建立索引需要注意的几点建议和Explain优化分析
- Mongodb 索引
- mongodb的地理空间索引如何在solr中体现
- MySQL索引背后的之使用策略及优化
- 图解 MongoDB 地理位置索引的实现原理(转)
- MongoDB性能篇 - 索引,explain执行计划,优化器profile,性能监控mongosniff
- MongoDB-索引
- 使用SQL Server DMVs优化索引策略