【发布时间】:2021-06-09 04:59:28
【问题描述】:
我正在为移动应用程序构建后端(通过 REST 的 .NET 5 WebApi)。 我们在数据库(Azure SQL Server)中有几百万个条目,它们都有一个地理位置。 应用程序应按当前位置排序查询它们。 此外,这应该被分页,例如在第一次调用时获取前 30 个结果,然后是接下来的 30 个,以此类推。
我想不出一个非常聪明的解决方案。 我当前的 30 个条目的第三页代码如下所示:
data.OrderBy(p => p.Location.Distance(currentLocation)).skip(60).take(30).toListAsync()
问题是即使我知道我只需要 30 个结果,查询也需要对整个表进行排序。 我知道我可以用索引来提升它,但是有没有人提示如何优化这个 LINQ 代码?
非常感谢!
【问题讨论】:
-
您在这里提供的内容不多。数据库是什么,瓶颈到底是什么,执行的查询是什么样的,到目前为止你尝试了什么等等。即我没有看到任何 where 条件,所以问题是为什么?您肯定不想查询 ALL 数据,而是将其限制在最大距离内(即距离您的位置 5000 公里/英里,这对搜索的人来说意义不大)
-
抱歉 - 在标签中提到了“sql-server”,但忘记将其添加到描述中
标签: c# sql-server entity-framework asp.net-core asp.net-web-api