使用数据类型列查询许多记录"point"



我有一个带有" location ";列,它是PostgreSQL的"点"。类型。

我想搜索许多精确点,例如:

SELECT * 
FROM my_table 
WHERE location IN ('1,1', '2,2')

这不起作用,它抛出一个错误

操作符不存在:point = point

要查找精确点,必须使用~=,但这种方式只能查询一个点。

我可以解决它,通过使用OR,如:

SELECT * 
FROM my_table 
WHERE (location ~= '0,1' OR location ~= '1,2')

然而,这看起来不是最优的方式,因为它停止使用索引(gist)超过5 "或"s,并做一个顺序扫描代替。

是否有一种方法,有一个简单的和最佳的查询,通过寻找确切的许多点来获得记录?

一种方法是使用any:

WHERE location ~= any (array['1,1'::point, '2,2'::point])

我希望它使用可用的索引,但是您必须检查您的数据。

最新更新