私は Firebird を使用しており、EVENTS というテーブルを作成しました。列は次のとおりです。
id (INT) | name (VARCHAR) | category (INT) | website (VARCHAR) | lat (DOUBLE) | lon (DOUBLE)
ユーザーは、自分の周囲の特定の半径でイベントを検索したいと考えていますが、ホーム都市の 2、3 文字しか入力しませんでした。つまり、たとえば、緯度と経度を含む 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 の制約を取得し、実際に結果を取得するのに数秒かかります。
クエリが恐ろしく見えるかもしれませんが、多くの制約が本当にボトルネックになっているのでしょうか? このクエリを最適化できますか?