【发布时间】:2014-11-26 06:18:36
【问题描述】:
我正在使用扩展 intarray 与版本 9.2.9 进行 int 比较。
虽然&& 可以使用索引来过滤包含至少一个值的数组,但有没有办法使用 GIN 或 GIST 索引来过滤至少有 n 个值相交的数组?
例如,GIN 或 GIST 如何使用2 <= icount(ARRAY[1,2,3] & int_array_column) 或2 <= ARRAY_UPPER((ARRAY[1,2,3] & int_array_column),1)?
【问题讨论】:
-
ARRAY[1,2,3] 需要是动态的吗?还是你总是有这些值 [1,2,3] ?
-
是的,不幸的是这些值需要是动态的。
-
问题不是很清楚......如果我理解正确,您正在尝试查找包含至少 n 个值的所有数组? (
ARRAY[1,2,3] & int_array_column是 Ruby/Sequel 的语法,用普通 SQL 编写简单的 ARRAY[1,2,3],对吧?) -
我试图找到一种方法来加速至少与 n 个值相交的数组相交查询。
&是数组交集的 intarray 扩展函数。icount(ARRAY[1,2,3] & int_array_column)计算相交的值的数量,但需要进行全表扫描才能找到与至少 2 个以上值匹配的数组。
标签: arrays postgresql indexing