|
Простой запрос (поиск страны по IP) сильно тормозит
|
|||
---|---|---|---|
#18+
Подскажите плз: есть задача поиска страны по IP адресу, используя справочник такого вида: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Так же пробовал создавать covering index (IpFrom,IpTo,Country). Так же пробовал дополнительно создавать отдельные индексы для IpFrom и IpTo Ну и для поиска используется простой запрос запрос вида: Код: plsql 1.
Проблема в том, что удается делать максимум 6000 поисков в секунду (Windows 10, Core i7), что крайне мало ( EXPLAIN QUERY PLAN выдает: SEARCH TABLE GeoIP USING INDEX IpRangeEndIdx (IpTo>?) Т.е. почему-то используется только один индекс только для второго значения. При этом тестовый запрос вида Код: plsql 1.
выполняется раз в 10-15 быстрее. Наверняка можно как-то сделать быстрее! Но пока после 3 часов экспериментов не получается... Помогите плз ! Уж вы то точно знаете как надо ! ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 13:12 |
|
Простой запрос (поиск страны по IP) сильно тормозит
|
|||
---|---|---|---|
#18+
Если это диапазоны IP адресов, то должно быть 1. Всегда IpFrom <= IpTo 2. Диапазоны не пересекаются Если так, то конкретный IP адрес можно проверить так Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 13:33 |
|
Простой запрос (поиск страны по IP) сильно тормозит
|
|||
---|---|---|---|
#18+
Еще так попробуй Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 13:38 |
|
Простой запрос (поиск страны по IP) сильно тормозит
|
|||
---|---|---|---|
#18+
авторЕсли это диапазоны IP адресов Да, именно диапазоны. Содержимое таблицы примерно такое: IpFrom, IpTo, Country 16777216,16777471,Australia 16777472,16778239,China 16778240,16779263,Australia 16779264,16781311,China 16781312,16785407,Japan .... К сожалению, LIMIT 1 и OrderBy IpTo не помогли - скорость никак не изменилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 15:00 |
|
Простой запрос (поиск страны по IP) сильно тормозит
|
|||
---|---|---|---|
#18+
Попробуй такой вариант Код: sql 1.
После дополнительно проверить IpFrom<=? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 15:07 |
|
Простой запрос (поиск страны по IP) сильно тормозит
|
|||
---|---|---|---|
#18+
amsdevНу и для поиска используется простой запрос запрос вида: Код: plsql 1.
попробуй Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 04:38 |
|
Простой запрос (поиск страны по IP) сильно тормозит
|
|||
---|---|---|---|
#18+
Уберите эти экзисты и нот экзисты. Вы же знаете где экзист, а где нот экзист. Может и поможет. Да, бегин и енд транзакций тоже помогает раз в десять. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 17:51 |
|
Простой запрос (поиск страны по IP) сильно тормозит
|
|||
---|---|---|---|
#18+
Возможно, поможет - 9308178 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 22:51 |
|
Простой запрос (поиск страны по IP) сильно тормозит
|
|||
---|---|---|---|
#18+
авторВозможно, поможет - 9308178 Большое спасибо, помогло ! Если переписать запрос вот так: SELECT Country FROM (SELECT Country, IpTo FROM GeoIP WHERE ?>=IpFrom ORDER BY IpFrom DESC LIMIT 1) sub WHERE ?<=sub.IpTo То получается в 36 (в тридцать шесть) раз быстрее !!! Огромное спасибо за помощь ! Сам бы ни в жизнь не допер что с подзапросом будет быстрее ! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 14:34 |
|
Простой запрос (поиск страны по IP) сильно тормозит
|
|||
---|---|---|---|
#18+
amsdev, я почти тоже самое предлагал 21641978 , только допроверка в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 14:36 |
|
|
start [/forum/topic.php?fid=54&fpage=4&tid=2008436]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 135ms |
0 / 0 |