美文网首页
mongodb-索引优化

mongodb-索引优化

作者: xsren2019 | 来源:发表于2019-11-26 16:03 被阅读0次

公司爬虫项目中用到了mongodb,最近有一个复杂查询,速度很慢需要优化,决定趁着这个机会好好学习一下mongodb 索引,于是上网查资料。现总结了一下过程。

1、查资料

首先上网查mongodb index 的原理和使用(从原理上理解会更走更少的弯路,记忆也更加深刻)。
参考:
1、先了解索引
1.1、这篇文字通过5W1H方式讲索引,很棒!
2、查看如何优化mongodb索引
2.1 结合例子讲解如何使用explain命令优化索引
2.2 explain命令详解,辅助理解2.1
2.3 10gen工程师写的,详细讲解mongodb应用场景

2、实践

看完上述几篇文章,觉得对mongodb的索引理解差不多了,然后就开整了。
2.1 建索引

db.my_coll.createIndex({'localname':1,'km':1,'crawl_time':-1})

2.2 查询

db.find({'localname':'bj','km':{'$lte':12}}).sort({'crawl_time':-1}).limit(10)

结果查询时间还是分钟级的。。肯定是哪里不对。于是我使用explain命令+排除法尝试,发现只要去掉sort就很快。。。这是为什么呢?这篇文章给了很好的说明。

引用原文,我建索引依然很慢的原因是:

所以,在有范围查询(包括in,gt, $lt 等等)的时候,其实刻意在后面追加排序索引通常是没有效果的。因为在进行范围查询的过程中,我们得到的结果集本身并不是按追加的这个字段来排的,还需要进行一次额外的排序才行。而在这种情况下,可能反序建立索引(排序字段在前、范围查询字段在后)反而会是一个比较优的选择。当然,是否更优也和具体的数据集有关。

So,我重新建立索引

db.my_coll.createIndex({'localname':1,'crawl_time':-1,'km':1})

现在查询结果达到毫秒级别了。


后记:
记得当时跟我同事讨论的时候,同事跟我说给每个字段建索引更方便。比如:

db.my_coll.createIndex({'localname':1})
db.my_coll.createIndex({'km':1})
db.my_coll.createIndex({'crawl_time':-1})

这样其实是不可取的,首先是效率没有联合索引高,其次更占存储空间。

相关文章

  • mongodb-索引优化

    公司爬虫项目中用到了mongodb,最近有一个复杂查询,速度很慢需要优化,决定趁着这个机会好好学习一下mongod...

  • MySQL,必须掌握的6个知识点

    目录 一、索引B+ Tree 原理 MySQL 索引 索引优化 索引的优点 索引的使用条件 二、查询性能优化使用 ...

  • sql优化的一般策略

    sql 优化的一般策略:索引优化,sql改写,参数优化,优化器 索引优化 以select * from vvsho...

  • 搜索引擎优化

    搜索引擎优化 SEO(Search Engine Optimization):汉译为搜索引擎优化。搜索引擎优化是一...

  • 17.MySQL优化

    《高性能MySQL》——这本书都有的 “字段”优化总结 “索引”优化总结 索引的优化 “查询SQL”优化总结 “引...

  • MySQL深入理解_SQL优化

    索引优化1[https://juejin.im/post/6844903954392825869] 索引优化2[h...

  • 增长黑客第三章(三)

    关键词:捆绑下载,搜索引擎优化, 3.6 搜索引擎和应用商店的优化营销 搜索引擎优化:利用搜索引擎的排序规则,通过...

  • 小白入门 | 做好SEO优化,只需八步

    SEO中文解释就是“搜索引擎优化”的意思,也可以理解为“百度搜索引擎优化”、“谷歌搜索引擎优化”、“360搜索引擎...

  • Mysql索引

    提起优化 SQL,可能会把它理解为优化索引。简单来说这也不算错,索引在 SQL 优化中占了很大的比重。索引用得好,...

  • mysql 索引优化

    索引的存储分类 索引的创建与删除 索引查看 mysql常用语句优化技巧定期优化表 常用优化 2.应尽量避免在whe...

网友评论

      本文标题:mongodb-索引优化

      本文链接:https://www.haomeiwen.com/subject/zyfywctx.html