Database 使用带总和的极限偏移量是否能提供准确的数据?

Database 使用带总和的极限偏移量是否能提供准确的数据?,database,postgresql,Database,Postgresql,我相信我有一个相当简单的问题,我无法在Stack上找到,也无法在GoogleLand上找到。我有一个相当基本的选择陈述,是这样的: SELECT itemid, itemdiscription, SUM(quantity) FROM mytable GROUP BY itemid, itemdescription ORDER BY itemid LIMIT 250 OFFSET 0; 基本上,这是从一个超过100k+记录的表中提取的,或者更少,这取决于

我相信我有一个相当简单的问题,我无法在Stack上找到,也无法在GoogleLand上找到。我有一个相当基本的选择陈述,是这样的:

SELECT
    itemid,
    itemdiscription,
    SUM(quantity)
FROM     mytable
GROUP BY itemid, itemdescription
ORDER BY itemid
LIMIT    250
OFFSET   0;
基本上,这是从一个超过100k+记录的表中提取的,或者更少,这取决于它是一个临时表。所以我想弄明白的是求和函数提供了可靠的数据,因为在相似的条目ID之间可能有30k条记录。我最初的想法是,这将预先执行查询,然后只返回前250个结果,但后来我开始考虑可能不会,所以我想我应该请社区确认这是如何工作的

我使用LIMIT/OFFSET的主要原因是因为我从PHP执行查询,这些值是为执行而迭代的变量,所以我没有处理使用大量内存的数组


谢谢

> P>作为DOCS状态,限制(或偏移)适用于“由其余查询生成的行”,因此在应用极限或偏移之前考虑查询的结果。应用这些子句会影响这些结果

下面是一些使用极限的方法


< P>作为DOCS状态,限制(或偏移)适用于“由其余查询生成的行”,因此在应用极限或偏移之前考虑查询的结果。应用这些子句会影响这些结果

下面是一些使用极限的方法


首先,在查询结果被处理后,LIMIT在查询结果的顶部工作。但是,如果服务器认为结果相同,则可以对此进行优化-例如,如果将
x
索引到字段中,则
从t ORDER BY x LIMIT 1中选择x将非常快

但是,如果您在这里使用LIMIT/OFFSET来提高性能或实现分页,则应该重新考虑您的方法。这是因为,即使所有聚合字段都已编制索引,LIMIT也可以利用这一点,当偏移量增加时,总工作量也会增加,很快运行时将几乎与无限制运行完整查询一样—非常昂贵


如果要将偏移量保持在非常低的水平(最好是0),我强烈建议在
(itemid,itemsdescription)
上添加复合索引-这会使您的查询运行得更快,特别是当您有许多行具有相同的
itemid

首先,在查询结果处理后,LIMIT会在查询结果的顶部起作用。但是,如果服务器认为结果相同,则可以对此进行优化-例如,如果将
x
索引到字段中,则
从t ORDER BY x LIMIT 1中选择x将非常快

但是,如果您在这里使用LIMIT/OFFSET来提高性能或实现分页,则应该重新考虑您的方法。这是因为,即使所有聚合字段都已编制索引,LIMIT也可以利用这一点,当偏移量增加时,总工作量也会增加,很快运行时将几乎与无限制运行完整查询一样—非常昂贵


如果要将偏移量保持在非常低的水平(最好是0),我强烈建议在
(itemid,itemsdescription)
上添加复合索引-这会使您的查询运行得更快,特别是如果您有许多行具有相同的
itemid

解释一下您的查询,看看它是如何执行的。您将看到,
限制
在分组后应用。

解释您的查询,查看它是如何执行的。您将看到,分组后将应用
限制

将执行整个求和操作,然后只有最终结果集将受到
限制/偏移
的影响。将执行整个求和操作,然后只有最终结果集将受到
限制/偏移
的影响。谢谢,我只是想100%确定,没有足够的测试数据来确认。谢谢你的小提琴链接!我想这会派上用场:-)谢谢,我只是想100%确定,没有足够的测试数据来确认。谢谢你的小提琴链接!我认为这很有用:-)性能问题是当我尝试在php中将75列和值的100k多条记录存储到单个数组中,然后循环,以便数据可以被处理,然后在web应用程序中显示。容纳该数组所需的内存对于php web服务器来说太高。当然,我可以增加每个会话的最大可用内存,但如果多个用户同时进行交互,仍然会导致问题。因此,我通过限制返回的记录来限制php数组的大小。另一方面,我更喜欢一次获取所有数据。性能问题是当我尝试在php中将75列和值的100k多条记录存储到单个数组中,然后循环,以便可以对数据进行操作,然后在web应用程序中显示。容纳该数组所需的内存对于php web服务器来说太高。当然,我可以增加每个会话的最大可用内存,但如果多个用户同时进行交互,仍然会导致问题。因此,我通过限制返回的记录来限制php数组的大小。另一方面,我宁愿一次获得所有数据。