0
Другие записи за это число:
2011/03/19 - таинственная хуйня MySQL
<< предыдущая заметкаследующая заметка >>
19 марта 2011
Кстати про MySQL давно хотел спросить

Есть база IP мира, определяющая город пользователя. Она, грубо говоря, заданы промежутком: from_ip int(11) — to_ip int(11), а результат (город для всех IP этого промежутка) — поле value. Задача — сделать выборку.

Традиционное решение: SELECT `value` FROM `IPTABLE` WHERE `ip`>=`from_ip` AND `ip`<=`to_ip`

Проблема в том, что база гигантская, а выборка не оптимизирована — MySQL не знает, что значения выстроены по возрастанию и промежутки повторяться не могут. Володя Русинов как-то объяснял мне, что MySQL работает по этому запросу в два хода: сперва делает таблицу выборки для всех ip больше from_ip (получая в среднем половину гигантской базы), затем отсекает из нее все, где ip меньше to_ip. При этом затраты ресурса колоссальны, несмотря на индексы. Если добавить LIMIT 1, то просто добавится третья операция — в конце отберет из получившегося 1 значение (а оно и так одно).

Вопроса два:

1. Существует ли метод переделать запрос (или таблицу), чтобы выборка происходила более оптимизированно?

2. Не появились ли за последние 3 года более удобные методы определить город по IP зашедшего? Платные пакеты и сервисы не предлагать — движок публичный, решения должны предлагаться удобные.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий


Include not found: `/home/www/lleo.me/blog/template/_reklamnaya_lirica.htm`