我有一個帶有很長選擇部分的查詢,其中包含許多情況 when 陳述句,為了清楚起見,我試圖讓它們起作用,但查詢開始運行的時間比以前長。
所以,為了測驗,我創建了一個簡單的表
CREATE TABLE t1 AS
select random()::numeric from generate_series(1, 5000000, 1)
和一個非常簡單的功能
create funtion f1 (i NUMERIC)
returns NUMERIC
LANGUAGE plpgsql
AS
$body$
begin
return i 1
end
$body$
并運行兩個查詢:
1: SELECT random, random 1 from T1
2: SELECT random, f1(random) from T1
我不知道為什么第一個比第二個快兩倍,所以請幫忙。對不起我的英語不好 :(
uj5u.com熱心網友回復:
那是因為f1必須為每一行呼叫該函式,并且呼叫 PL/pgSQL 函式非常昂貴。
如果你將它定義為一個 SQL 函式,它可以被行內,這會便宜得多:
FREATE FUNCTION f1(i NUMERIC) RETURNS numeric
LANGUAGE sql AS
'SELECT i 1';
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/340201.html
標籤:sql PostgreSQL
上一篇:PostgreSQL表上的大量洗掉:洗掉表中99,9%的行
下一篇:如何按部門列舉行?
