1

各行に 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 が検出すると予想される行数が合計行数に近い場合、インデックスを無視することを決定しているように見えます。

その場合、強制的にインデックスを使用するか、テーブル全体のスキャンを確実に回避できますか?

4

1 に答える 1

0

NB は正しかったです。単純に LIMIT を下方に調整すると、インデックスが使用されます。本当に明らかです。

于 2012-03-29T12:19:12.567 に答える