我正在使用 Firebird 并创建了一个名为 EVENTS 的表。这些列是:
id (INT) | name (VARCHAR) | category (INT) | website (VARCHAR) | lat (DOUBLE) | lon (DOUBLE)
用户想要搜索他们周围某个半径范围内的事件,但只输入了他们家乡城市的两个或三个字母。所以我们有 - 比方说 - 200 个可能的城市及其纬度和经度。因此,我的 SQL 查询如下所示:
SELECT id FROM events WHERE ((lat BETWEEN 30.09 AND 30.12) AND (lon BETWEEN 40.78 AND 40.81)) OR ((lat BETWEEN 30.09 AND 30.12) AND (lon BETWEEN 40.78 AND 40.81)) OR ...
因此,我们在 WHERE 子句中获得了 200 个约束,实际得到结果需要几秒钟。
我知道查询可能看起来很糟糕,但许多限制真的是瓶颈吗?这个查询可以优化吗?