Postgresql

在PostgreSQL中獲取兩個文本數組交集長度的最快方法

  • January 30, 2018

這是我目前正在使用的:

CREATE FUNCTION array_intersect(a1 anyarray, a2 anyarray)
RETURNS anyarray AS
$$ 
 SELECT ARRAY(
   SELECT unnest($1)
   INTERSECT SELECT unnest($2)
   ORDER BY 1
 );
$$ LANGUAGE sql
IMMUTABLE STRICT;


--get the length:
select array_length ( array_intersect(array[...], array[...]), 1);

有更快的方法嗎?

  1. 您說您正在尋找*“兩個數組之間的 Jaccard 相似性”*

您可以考慮提供此功能的MadLibdist_jaccard()

被視為集合的兩個 varchar 向量之間的 Jaccard 距離。

  1. 您可能想在沒有STRICT. 這可能會減慢它的速度。
  2. 你可能想使用INTERSECT ALL特別是如果你知道你沒有在$1.
  3. 正如 Craig Ringer 在評論中所說,您可能想要退出intarray並考慮使用&.

在這裡給出更準確的答案,

  • 有哪些數據類型?
  • 我們在每個數組上談論多少個元素?
  • 提供多少排除INTERSECT

引用自:https://dba.stackexchange.com/questions/58329