3

我有一个这样的查询:

SELECT boroughs.name 
FROM boroughs, uniroads 
WHERE uniroads.normalizedName='6 AVENUE' 
AND st_intersects(boroughs.geometry, uniroads.way) 
AND boroughs.name='Brooklyn'

0 results

但是当我运行它时,它没有返回任何结果。但是,我能够在表中找到我希望它返回的特定行,并且当我添加一个要求该特定行的子句时,它可以正常工作:

SELECT boroughs.name 
FROM boroughs, uniroads 
WHERE uniroads.normalizedName='6 AVENUE' 
AND st_intersects(boroughs.geometry, uniroads.way) 
AND boroughs.name='Brooklyn' 
AND uniroads.osm_id='23334071'

1 result

我通过 Postgres.app 将 Postgres 9.2.2.0 与 PostGIS 一起使用。

4

1 回答 1

1

一个推测。

uniroads.osm_id看起来像一个 Key,因此它最有可能被索引。

AND uniroads.osm_id='23334071'子句导致(另一个,也许?)索引被使用,因此这可能意味着(一些?)最初使用的索引已损坏。

也许以下可能会有所帮助?

REINDEX TABLE boroughs;
REINDEX TABLE uniroads;

在任何情况下,EXPLAIN ANALYZE都需要查询以及所涉及的表的完整定义。

于 2013-02-08T14:56:44.500 回答