gpt4 book ai didi

sql - 超过阈值时查询执行停止

转载 作者:行者123 更新时间:2023-11-29 13:00:04 25 4
gpt4 key购买 nike

我正在对 j2ee 页面进行优化。在页面的一部分,有一些框可以应用一些过滤器来生成不同类型的报告。之后,我们会显示一个包含所有结果的表格,但有时根据所选的过滤器,有大量数据需要绘制,我们正在考虑将其直接导出到 Excel 文件。

我们有一个查询来计算我们拥有的轮廓的数量。但该查询可能需要一些时间,具体取决于所选的过滤器。我们已经决定设置一个阈值来决定何时在网页中绘制结果或何时在 excel 文件中绘制结果。但是我们想加速 de 'count query' 以仅知道最终计数是高于还是低于阈值,我们不需要仅在高于或低于阈值时才知道确切的行数,但我们需要尽可能快的查询可能。

SELECT 
COUNT(*) count
FROM
TABLE_X
INNER JOIN TABLE_Y ON X.a = Y.a
WHERE
X
AND Y
GROUP BY
X, Y
**Having
COUNT(*) > THRESHOLD;**

这是我们的主要想法,但我很迷茫如何继续以及是否可以添加一个子句以在超过阈值时停止查询。

最佳答案

您似乎是在尝试估计计数而不是实际计算计数,对吧?

有一篇有趣的文章解释了如何做到这一点。它指出它比自己执行查询快得多,因此它可能正是您所需要的: https://wiki.postgresql.org/wiki/Count_estimate

基本上,您的想法是查询目录表 pg_class:

 SELECT reltuples FROM pg_class WHERE relname = 'tbl';

或者,如果您有更复杂的查询:

 SELECT count_estimate('SELECT * FROM tbl WHERE t < 100');

其中 count_estimate 是分析执行计划以获得估计的函数:

CREATE FUNCTION count_estimate(query text) RETURNS INTEGER AS
$func$
DECLARE
rec record;
ROWS INTEGER;
BEGIN
FOR rec IN EXECUTE 'EXPLAIN ' || query LOOP
ROWS := SUBSTRING(rec."QUERY PLAN" FROM ' rows=([[:digit:]]+)');
EXIT WHEN ROWS IS NOT NULL;
END LOOP;

RETURN ROWS;
END
$func$ LANGUAGE plpgsql;

关于sql - 超过阈值时查询执行停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32958815/

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