Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Индексы и BETWEEN - непонятный баг (G_M_S) 03/04/2012 - 16:30:14
      Re: Индексы и BETWEEN - непонятный баг (Akina) 04/04/2012 - 10:50:53
      Re: Да, кстати... (Akina) 04/04/2012 - 11:06:52



From: G_M_S - 03/04/2012 - 16:30:14
Subject:Индексы и BETWEEN - непонятный баг
-----------------
Доброго времени суток!

Возникла проблема такого рода: есть табличка для хранения геотегов к файлам (для отображения на карте гуглмапс). В ней имеются 2 поля: lat и lng типа DOUBLE, содержащие широту и долготу в градусах (для тех, кто не сталкивался - циферки от -180 до 180 с точностью до 3-х знаков). Заполняю ее тестовым набором записей чуть более полумиллиона штук (527 тыс, если быть совсем точным). Движок - InnoDB. Делаю выборку запросом:

select * from files_geotags where (lat between -40 and -38) and (lon between 28 and 30);

Получаю время выполнения ~5 секунд. Вешаю составной индекс на оба поля, повторяю выборку - получаю время выполнения ~26 секунд о_0 Это что за фокусы такие? Я раньше с орацлом и интербейзом работал и НИ РАЗУ не видел, что б индекс на числовом поле УВЕЛИЧИВАЛ время выборки! Проверил эксплайном - индекс используется! Без индекса перебирает все 527 тыс записей, с индексом (range) перебирает всего 29 тыс. В чем может быть проблема?

Пробовал создать два дополнительных поля типа INT и пихнуть в них координаты, умноженные на 1000 (что б не терять дробную часть - зачастую координаты углов карты отличаются менее чем на 1 градус) - результат вышел даже хуже: без индекса запрос выполняется 7 секунд, с индексом - около 30.

Подскажите пожалуйста, как побороть этот баг? Почему запрос С ИНДЕКСОМ выполняется ДОЛЬШЕ, чем без него? В чем проблема?


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
41121



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |