私は鳥種の目撃情報を記録するテーブル foo を持っています。foo_id はその PK で、その他の関係する列は s_date、緯度、経度です。species_id はその FK です。s_date、緯度と経度、species_id にインデックスがあります。テーブル foo には 2,000 万件のレコードがあり、増加しています。次のクエリは、特定の緯度/経度における最新の種の目撃情報上位 10 件を表示します。クエリに時間がかかりすぎています (10 分以上かかることもあります)。それを最適化する方法は?私はmysqlを使用しています。
SELECT species_id, max(s_date)
FROM foo
WHERE latitude >= minlat
AND latitude <= maxlat
AND longitude >= minlon
AND longitude <= max lon
GROUP BY species_id
ORDER BY MAX(s_date) DESC LIMIT 0, 10;