我的 mongodb 集合建了 data 字段索引,在 mongoshell 执行查询的时候 db.col.find({"data":"mydata"}) 返回数据的时间差异很大
观察了一下,每次查询都用到了索引,如果该集合没有我查询的数据的时候,几乎瞬间就可以返回,但是如果查询到了几百条数据,通常会在 3-5 秒才能返回,差异实在太大。
是不是查询的性能大部分都在返回数据上了?老铁们有没有啥办法让 mongodb 返回数据快一些,或者说这个性能怎样可以优化一下,查询到的数据越多,返回的就越慢…… (一直是在 mongoshell 查询的,没有用代码查)
1
silentsee 2020-10-22 10:15:19 +08:00 1
感觉像是单个文档的数据太大
|
4
xeathen 2020-10-22 10:19:49 +08:00 1
mongo 在本地还是云服务器上?
|
6
silentsee 2020-10-22 10:45:04 +08:00 1
可以 explain 看一下
https://docs.mongodb.com/v4.0/reference/explain-results/ |
7
lancelee01 2020-10-22 11:24:37 +08:00 1
应该是缓存的原因吧,MongoDB 如果数据在内存里,返回的特别快,如果在磁盘上,加载耗时长吧
|
8
dtgxx OP |
9
dtgxx OP @lancelee01 #7 不过感觉 mysql 这种,也是磁盘存储,每次查询 1000 条数据,压力也不大,mongodb 里面,一次 100 条,就要几秒了,
|
10
lancelee01 2020-10-26 17:28:47 +08:00 1
@dtgxx 两个底层存储默认都是 B+树,MySQL 压力不大是不是,查询条件和数据量都不一样呢
|
11
dtgxx OP @lancelee01 #10 数据量确实有差距,mongo 的大一些。 mongo 里面比如没查到,瞬间就可以结束啥也不返回,查到 200 条的话,会卡三秒。这部分时间是不是消耗在了从磁盘读取数据上呢?
|
12
lancelee01 2020-10-27 09:11:53 +08:00 1
可能是,MongoDB 特别吃内存,内存生产我们都是 256G 的。MongoDB 一般是热点数据都是在内存中
|
13
dtgxx OP @lancelee01 #12 嗯呢 应该是这原因
|