1
我遇到了計數查詢的麻煩,它太慢了。然後我發現一篇文章談論PostgreSQL上的Count Estimate。它使用了以下功能來估計行的量: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 ,似乎...),但是當我嘗試使用這個特定的條件~
它會返回一個錯誤的計數。
有無論如何去適應此功能,使其在where子句中與~
一起使用?
謝謝
你是什麼意思與「返回一個錯誤的計數」?你是否知道執行計劃返回**估計**?優化器沒有足夠的信息來正確表示正則表達式匹配的數量。在執行計劃中使用正則表達式匹配,你無法靠近現實。 –
我知道它會返回一個估計值,但在這種情況下,它只返回3行,實際數量爲800行。就像你在使用正則表達式時所說的,我並沒有接近現實。 :( – Andre
對此你沒有辦法做到,Postgres沒有存儲足夠的統計數據能夠給你一個更好的估計。 –