gpt4 book ai didi

mysql - 是否可以限制扫描文档的数量,类似于MySQL subselect?

转载 作者:行者123 更新时间:2023-11-29 01:48:23 26 4
gpt4 key购买 nike

当查询包含数百万文档的 MongoDB 集合以及对非索引字段进行过滤或排序时,查询运行速度太慢,因为 mongo 需要扫描整个集合。在 Mysql 上,这可以通过执行仅过滤最后 40k 行的子选择来实现,例如:

select c.name, c.age, c.address //another fields
from (select * from myTable order by id desc limit 40000) as c
where c.name = 'My name' //more and more filters
order by c.date_req desc
limit 25

在这个 SQL 中,我获取最后 40k 行,然后应用过滤和排序逻辑,即使表有数百万行,它也能快速运行。

在 MongoDB 上,我只有在对索引字段进行过滤或排序时才能获得良好的性能,否则运行速度太慢。我想我不能在每个字段中创建索引,那么在这种情况下我该怎么办? MongoDB 上有类似的东西吗?

最佳答案

您可以通过使用按您需要的顺序执行操作的聚合管道来做到这一点:

db.coll.aggregate([
// Get the last 40k docs
{$sort: {_id: -1}},
{$limit: 40000},
// Filter and sort those docs
{$match: {name: 'My name'}},
{$sort: {date_req: -1}},
// Take the first 25 of those
{$limit: 25}
])

关于mysql - 是否可以限制扫描文档的数量,类似于MySQL subselect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58506813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com