各行に Point (経度と緯度) が含まれる ~40k 行のサンプル セットを含むテーブルがあります。MySQL の空間拡張機能を使用して、境界内に存在するポイントを見つけています。
結果がほとんどないことがわかっている境界内で検索すると、インデックスがそのまま使用されます。ただし、私のテスト データセットは、主に英国周辺の場所で構成されています (より大きなライブ データセットは、パーセンテージで類似している可能性があります)。この境界ボックス内で検索すると、インデックスは使用されず、代わりに完全なテーブル スキャンが実行されます。
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE ep ALL PRIMARY,location NULL NULL NULL 37221 Using where
そのため、MySQL が検出すると予想される行数が合計行数に近い場合、インデックスを無視することを決定しているように見えます。
その場合、強制的にインデックスを使用するか、テーブル全体のスキャンを確実に回避できますか?