0

是否可以在不进行全表扫描的情况下根据列的累积 SUM 停止获取行?如果是这样,怎么做?

例子

假设您有一张表,卖家可以在其中列出待售商品。为简单起见,假设表包含字段quantityprice.

ID 数量 价格
1 2 5
2 4 3
3 3 4
4 1 1
5 4 3

您想购买 6 件商品,并且需要足够的行来覆盖 6 件商品,按最低价格排序。在这种情况下,您需要第 4 行(共 1 行)、第 2 行(共 5 行)和第 5 行(共 9 行,足以覆盖 6 行)。

问题

我尝试了很多东西,包括 JOINS、窗口函数和用户变量,但都没有成功。它可以工作,但是在处理数百万行时速度很慢。每个解决方案似乎都在为与 WHERE 子句匹配的每一行创建一个累积总和,然后选择累积总和足够多的行。这种方法具有可怕的性能。

使用多行获取 X 行,将它们添加到代码中,并在需要时在循环中请求 X 更多以覆盖数量时,有时会快得多。这确实带来了与并发访问相关的其他问题,并以这种方式降低了性能。

有没有办法用 MariaDB 做类似的事情?如果没有,有什么想法可以加快速度吗?

关于相同功能但没有性能部分的问题: 通过行值的总和限制 SQL

4

0 回答 0