在上一部分中,我们学会了如何为我们的PostgreSQL数据库开发简单的C扩展名。但是现在出现了这个问题,为什么甚至要麻烦扩展,尤其是当Postgres具有某些内置功能或操作员可以执行与我们相同的任务时。
好吧,您可能会想到这样做的原因之一是出于绩效原因。允许我详细说明。
在第1部分中,我们创建了一个减法功能,该函数从第一个ARG中减去了第二个参数。足够简单!
,但我们本可以通过另外两种方式做到这一点。一种只是使用基本的SQL-运算符,另一个仅使用在我们的数据库内制作PLPGSQL函数,该功能为我们完成工作。让我们看看两种方法。
PLPGSQL功能
在我们的PostgreSQL数据库中,我们可以运行此代码
CREATE FUNCTION submepl(a integer, b integer)
RETURNS integer
as $$
BEGIN
return a-b;
END;
$$ LANGUAGE plpgsql;
这将创建一个函数,该函数与我们的C函数所做的完全相同,即减去两个数字。
SQL操作员
这是不言自明的,我们只是使用 - 运算符减去数字。例如
SELECT 10 - 5;
基准
现在让我们考虑我们的功能与SQL运算符和PL功能调用方式。为了跟踪时间,我们将在Linux中使用时间函数并运行每种方法 100万次!
不必说,结果如下:
操作员和C功能几乎在执行中几乎相同。另一方面,PL功能花了更多时间:
这仅用于减去简单的基本功能。这只会随着更复杂的功能而增加。
简而言之,如果您的需求是您的需求,那么扩展是您的朋友!