Postgresql
在PostgreSQL中獲取兩個文本數組交集長度的最快方法
這是我目前正在使用的:
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);
有更快的方法嗎?
- 您說您正在尋找*“兩個數組之間的 Jaccard 相似性”*
您可以考慮提供此功能的MadLib
dist_jaccard()
被視為集合的兩個 varchar 向量之間的 Jaccard 距離。
- 您可能想在沒有
STRICT
. 這可能會減慢它的速度。- 你可能想使用
INTERSECT ALL
特別是如果你知道你沒有在$1
.- 正如 Craig Ringer 在評論中所說,您可能想要退出
intarray
並考慮使用&
.在這裡給出更準確的答案,
- 有哪些數據類型?
- 我們在每個數組上談論多少個元素?
- 提供多少排除
INTERSECT
?