2012-03-29 5 views
1

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

Также, если вы можете опубликовать 'table_structure', это тоже хорошо. –

ответ

0

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

+0

Не обманывайте себя предложением LIMIT, это не означает, что ничего не используется. LIMIT OFFSET будет получать результаты, а затем отбрасывать количество позиций OFFSET. Если вы используете таблицы MyISAM, google для «поиска в конце строки» и соответствующим образом настройте свой запрос. –