我有两个单独的查询,我想在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)
文本版本更容易编写,并且不需要使用其他类型混淆数据库。自定义类型版本唯一的用途是执行速度可能更快。
这就是我的问题,复合类型执行效率高于仅仅转换为文本并使用它吗?我担心的是数据库将行转换为字符串,然后将该字符串转换为幕后的自定义类型,这实际上会使它变慢。
编辑:
在大多数应用程序中,似乎在性能方面可能没有明显的差异。因此,后续问题将是:进行文本比较是否存在缺点?