gpt4 book ai didi

database - 为什么即使在限制结果时公用表表达式也更快?

转载 作者:搜寻专家 更新时间:2023-10-30 23:41:42 24 4
gpt4 key购买 nike

我无法理解为什么会出现以下查询:

SELECT ref,
article_number,
count(article_number)
FROM invoice
INNER JOIN goods_list USING (invoice_number)
WHERE invoice_owner = 'someone'
GROUP BY invoice_number, article_number
LIMIT 1

比这个慢得多:

WITH base_data AS (
SELECT invoice_number
FROM invoice
WHERE invoice_owner = 'someone'
LIMIT 1
)

SELECT invoice_number,
article_number,
count(article_number)
FROM base_data
INNER JOIN goods_list USING (invoice_number)
GROUP BY invoice_number, article_number

是否在返回整个结果集后应用限制?

最佳答案

第一个查询处理发票所有者的所有 数据。它执行分组依据最终返回一行。

第二个查询预先在 CTE 中获取发票所有者的一行。它将该单行连接到另一个表中,然后对更少的行进行聚合。

因此,第二个查询要快得多也就不足为奇了,因为它为聚合处理的行要少得多。

注意:当使用limit 时,您还应该使用order by。否则,您可以在代码运行时获得任何匹配的行,甚至可能在不同的运行中获得不同的行。

关于database - 为什么即使在限制结果时公用表表达式也更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34289005/

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