私はMySQLとデータベース全般に非常に慣れていませんが、長い時間がかかるように思われるクエリがあります。緯度と経度の座標を使用して、別の場所から5マイル以内にある約700,000の場所データベースから場所を見つけています。問題は、クエリに2.12秒かかることです。トラフィックを取得し始めると、MySQLがジャムするのではないかと心配しています。これが私のコードです:
SELECT *,((ACOS(SIN(44.4726 * PI() / 180) * SIN(lat * PI() / 180) + COS(44.4726 * PI() / 180) * COS(lat * PI() / 180) * COS((-93.1785 - lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance FROM locations HAVING distance<=5 ORDER BY distance ASC LIMIT 30;
latフィールドとlonフィールドにインデックスを付けていますが、それでも長い時間がかかります。これは、サーバーに要求していることで予想されることですか?追加してスピードアップできますか
WHERE state = "$state"
もしそうなら、私はそれをSelectのどこに追加しますか?