我在查询计数时遇到问题,它太慢了。然后我发现一篇文章谈论 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/