MySQL не использует возможный индекс - почему? - PullRequest
1 голос
/ 29 марта 2012

У меня есть таблица, содержащая выборочный набор из ~ 40 тыс. Строк, где каждая строка содержит точку (долгота и широта).Я использую пространственное расширение 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 решает игнорировать индекс при количестве строкон ожидает найти, что он близок к общему количеству строк.

Так ли это, и если да, могу ли я принудительно использовать индекс или иным образом гарантировать, что полное сканирование таблицы будет исключено?

1 Ответ

0 голосов
/ 29 марта 2012

N.B был верным, просто отрегулировать LIMIT вниз означает, что индекс используется. Очевидное действительно.

...