Postgres:比较行作为文本或复合类型更有效吗?

时间:2016-06-03 20:31:27

标签: sql performance postgresql compositetype

我有两个单独的查询,我想在sproc中测试相等性。查询返回一个整数和字符串作为一对。

我的第一种方法是比较汇总的文本值数组,从将行转换为文本

FOR REC IN
   SELECT * FROM ...
LOOP
    var1 := array_append(my_var, REC::TEXT)

比较为:

select var1 = (SELECT array_agg(x)::TEXT[] FROM (select ... ) x)

我的第二种方法是使用自定义类型的数组:

FOR REC IN
   SELECT x::my_type as r FROM (...) x
LOOP
   var1 := array_append(my_var, (REC.r)) 

比较为:

select var1 = (SELECT array_agg(x::my_type) FROM (select ... ) x)

文本版本更容易编写,并且不需要使用其他类型混淆数据库。自定义类型版本唯一的用途是执行速度可能更快。

这就是我的问题,复合类型执行效率高于仅仅转换为文本并使用它吗?我担心的是数据库将行转换为字符串,然后将该字符串转换为幕后的自定义类型,这实际上会使它变慢。

编辑:

在大多数应用程序中,似乎在性能方面可能没有明显的差异。因此,后续问题将是:进行文本比较是否存在缺点?

0 个答案:

没有答案