mysql (Navicat) で 2 秒ほどで実行される SQL クエリがあり、600,000 の場所を実行してすべてのテーブル データを返し、入力した緯度と経度の間の距離を計算します。
SQL は次のようなものです。
select *, 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) -
radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance
FROM places
GROUP BY places.user_id
HAVING distance > 0
ORDER BY distance LIMIT 0 , 10;
上記のクエリでは、37 と -122 が緯度と経度としてクエリに渡されます。
これを Navicat で実行すると 2 秒ですが、Cakephp や mysql_query() を使用したストレート php では数分かかります。
なぜこれが発生し、どうすれば修正できますか?
XAMPP を実行している Win7 4GB ボックスで、MySQL と Apache の両方をローカルで実行しています。