sql - PostgreSQL 上的计数估计

标签 sql postgresql count

我在查询计数时遇到问题,它太慢了。然后我发现一篇文章谈论 PostgreSQL 上的计数估计。它使用以下函数来估计行数:

CREATE OR REPLACE FUNCTION public.count_estimate(query text)
  RETURNS integer AS
$BODY$
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
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.count_estimate(text)

我是这样使用它的:

SELECT count_estimate('SELECT * FROM table');

我传递给函数的查询接受条件(=、>、<、LIKE、SIMILAR TO ...),但是当我尝试使用这个特定的条件 ~ 时,它返回一个错误数数。

有没有办法修改此函数以使其与 where 子句中的 ~ 一起使用?

谢谢

最佳答案

https://www.postgresql.org/docs/current/static/sql-explain.html

https://www.postgresql.org/docs/current/static/using-explain.html

您使用的函数只是运行 EXPLAIN 并解析输出以显示预期的行数。 “调整”函数以在此处显示更好结果的唯一方法是在 EXPLAIN 之后添加 ANALYZE 以获得“实际”行。但是,当然,作为参数传递的查询的实际执行会让您付出代价,因此如果您在实际运行查询之后进行估算,那么在运行实际查询之前估算计数是没有意义的。

关于sql - PostgreSQL 上的计数估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45930157/

相关文章:

mysql - 如何在 MySQL 8(如 MSSQL)上使用表达式作为 LAG() 第二个参数?

postgresql - 使用 PPGool-ii 在 Amazon EC2 上部署高可用性 Postresql 9.0

postgresql - 如何在 postgresql 中显示目录和模式?

php - 如何计算一个非常大的字符串中的新行?

python - 如何在 Pandas 数据框中的日期时间检查前几行中的行值?

c# - Sqlite 与 C# 和 where 子句

mysql - 从 3 个表中选择

mysql - MySQL select 语句中的查询计数

c# - 分组 2 个表,计算值,然后将结果保存在字典中

sql - 将 BIGSERIAL 转换为 BIGINT