x.find().select({b:1}).lean()
这里x是个大表,字段非常多.
请教一下大家:
1.select和lean到底只是减少返回时间还是同时减少了查询时间
2.大表(字段非常多)对查询有什么影响吗? 还是加了索引基本就无影响?
x.find().select({b:1}).lean()
这里x是个大表,字段非常多.
请教一下大家:
1.select和lean到底只是减少返回时间还是同时减少了查询时间
2.大表(字段非常多)对查询有什么影响吗? 还是加了索引基本就无影响?
5 回答4.8k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
5 回答1.9k 阅读
2 回答1.3k 阅读✓ 已解决
3 回答2k 阅读
1 回答3.2k 阅读
先说lean的问题,这纯粹是客户端的一个动作,是mongoose特有的功能。确实可以让返回结果更快,但是对服务端没有任何不同。
select是只返回其中一些字段,但MongoDB不是关系数据库,动态数据模型决定了在这个文档读出来之前你是不知道它里面有哪些字段的。所以从这个角度来讲,不管你要返回多少字段,整个文档都必须要从磁盘上读出来,所以select对磁盘I/O没有帮助。但是确实可以减少在网络上传输的流量,因此对延迟时间和资源使用是有一定帮助的。
最后说说索引的问题。索引的作用主要是帮助过滤和排序,这两者你这都没有,所以基本上是不会有帮助的。